这里我们讨论下php中__autoload和spl_autoload_register的区别, 当然并不是很完善, 毕竟比较复杂, 但是能用就行.

__autoload作用

在php的早期是没有spl_autoload_register函数的, 只有__autoload函数, 作用是自动加载类库.

当我们php文件中要引入其他类库时, 往往需要使用require_once来手动加载, 但当类库很多, 这样就显得繁琐, 往往一个文件要使用十几个require_once, 为了避免这种情况我们可以使用__autoload函数, 来实现自动加载.

__autoload应用举例

  1. 实现__autoload函数, 当php加载某个没注册的类时, 会自动调用, 并默认传入类的全路径的namespace加类名, 我们可以通过解析namespace和类名找到文件位置

    function __autoload($namespaceWithClassName){ //伪代码解析得到文件位置 $filePath = parse($namespaceWithClassName); //加载 if(is_file($filePath)){ require_once($filePath); } }

  2. 下面有两个文件, 文件一实现了一个类, 文件二调用了该类, 由于我们实现了__autoload函数, 所以在文件二中不需要用require引入文件一, php会自动调用__autoload函数执行, 自动加载文件一, 这样就能使我们代码非常简洁

spl_autoload_register的作用

spl_autoload_register的全名是 standard php library autoload register, 意思是php标注库的autoload注册函数, 其实就是__autoload的升级版本, 和__autoload作用一样.

我们仔细观察__autoload就能发现该函数的缺点:

  1. 必须实现__autoload, 而不能随心所欲的实现自己喜欢名称的函数

  2. 全局只有实现一个自动加载函数, 不能实现多个自动加载函数, 不够灵活

  3. 自动加载函数不能卸载, 不够灵活, 使用spl_autoload_register注册的自动加载函数, 可以被spl_autoload_unregister卸载掉

说白了, spl_autoload_register就是为了解决__autoload不够灵活的缺点, 通过spl_autoload_register可以注册多个自动加载函数, 并且能根据情况灵活调用

spl_autoload_register应用举例

  1. 实现多个自动加载函数, 函数名随意取, 但是要记住, php还是会默认传入全路路径namespace加类名做为参数.

    //自动加载函数1 function my_autoload_func_first($namespaceWithClassName){ //加载逻辑 ... }

    //自动加载函数2 function my_autoload_func_second($namespaceWithClassName){ //加载逻辑 ... }

  2. 使用spl_autoload_register注册上面的加载函数

    spl_autoload_register(my_autoload_func_first) spl_autoload_register(my_autoload_func_second)

总结

反正使用spl_autoload_register就对了

参考资料

PHP中spl_autoload_register()函数用法实例详解

What is Autoloading; How do you use spl_autoload, __autoload and spl_autoload_register?

THE END
开启精彩搜索

历史搜索

用户名或邮箱
密码
用户名
密码
重复密码
邮箱
注册
找回密码
注册 登录
邮箱
邮箱验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

新增

新增