php spl_autoload_register vs __autoload?

2022-08-30 14:50:45

你好,除了我们可以使用自己的名称自动加载之外,使用这个有什么差异吗?有什么性能差异吗?它们如何在内部工作?

之间

function __autoload_libraries($class){
    include_once 'lib.'.$class.'.php';
}

spl_autoload_register('__autoload_libraries');

function __autoload($class){
    include_once 'lib.'.$class.'.php';
}

答案 1

__autoload通常被认为是过时的。它只允许一台自动装载机。通常,仅当您使用的是不支持 的 PHP 版本时,才应使用 。__autoloadspl_autload_register

spl_autoload_register允许注册多个自动加载器,这些自动加载器将依次运行,直到找到并加载匹配的类/接口/特征,或者直到所有自动加载选项都用尽。这意味着,如果您使用的是框架代码或其他实现其自身自动加载器的第三方库,则不必担心导致冲突。

更新:

__autoload从 PHP 7.2.0 开始正式弃用,这意味着它现在处于斩波块上。如果你想让你的代码与PHP的未来版本兼容,你绝对不应该使用__autoload


答案 2

“自动加载类”的文档如下:

spl_autoload_register() 为自动加载类提供了更灵活的替代方案。因此,不鼓励使用 __autoload(), 将来可能会被弃用或删除。

spl_autoload_register() 的文档内容如下:

如果必须有多个自动加载函数,spl_autoload_register() 允许这样做。它有效地创建了一个自动加载函数队列,并按照它们定义的顺序运行每个函数。相比之下,__autoload() 只能定义一次。


推荐