zoukankan      html  css  js  c++  java
  • PHP 浅析spl_autoload_register

    • PHP面向对象编程里可以使用__autoload()魔术方法实现自动加载功能。当实例化一个不存在的类时,自动触发自动加载。起初我不太理解spl_autoload_register用来干什么。感觉没什么用。后来才一点一点 明白: 比如当你自己写一个函数loadClass()用来加载不存在的类的时候,需要你手动调用loadClass()函数,而你使用spl_autoload_register注册这个loadClass函数后,就不再需要手动调用loadClass函数了,当你实例化不存在的类时,会自动触发。
    • 根据注册的先后,如果在第一个注册的方法或函数里加载了类文件,就不会再执行第二个被注册的类的方法或函数。反之就会执行第二个被注册的类的方法或函数
    • 为何有__autoload还要使用spl_autoload_register ?设想一下:假如在一个系统的实现中,假如需要使用很多其它的类库,这些类库可能是由不同的开发工程师开发,其类名与实际的磁盘文件的映射规则不尽相同。这时假如要实现类库文件的自动加载,就必须在__autoload()函数中将所有的映射规则全部实现,因此__autoload()函数有可能会非常复杂,甚至无法实现。最后可能会导致__autoload()函数十分臃肿,这时即便能够实现,也会给将来的维护和系统效率带来很大的负面影响。在这种情况下,在PHP5引入SPL标准库,一种新的解决方案,即spl_autoload_register()函数。因为spl_autoload_register可以注册多个自动加载方法,所以我的理解是,维护项目的每个人可以自己写一个方法或函数,然后使用spl_autoload_register注册。这样每个人可以按照自己定义的类与文件的映射规则来找到类文件并加载进来。既不会造成所有人把文件映射规则都写在一个__autoload方法里造成的代码臃肿,也不会造成维护困难。(如果第一个人写的自动加载方法没有成功加载类文件,会继续执行注册的函数或方法,直到成功加载进来才停止执行后面注册的函数或方法,参考第二条;如果注册的方法全部执行了也没能成功加载类文件,那就会报错)
    • 如果使用了spl_autoload_register,那么__autoload()就会失效,如果想继续使用__autoload(),就得用spl_autoload_register注册一下。
    • 参考博客:https://www.jianshu.com/p/cc7ed9f0b378
    • https://www.jianshu.com/p/caa2e7f582d2
    • 看第四部分 => 自动加载和命名空间的使用https://www.zybuluo.com/phper/note/66447
  • 相关阅读:
    Rocket
    Rocket
    Rocket
    Rocket
    Rocket
    PHPstorm快捷键大全
    PHP命名规则
    第二章:第2章PHP基础语法
    第一章:初识PHP
    jQuery适用技巧笔记整合
  • 原文地址:https://www.cnblogs.com/bneglect/p/12174822.html
Copyright © 2011-2022 走看看