php spl_autoload_register vs __autoload?

时间:2011-08-01 05:35:51

标签: php autoload

你好有没有使用这个例外我们可以使用自己的名字自动加载吗?有没有性能差异?他们内部如何运作?

之间

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

spl_autoload_register('__autoload_libraries');

VS

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

2 个答案:

答案 0 :(得分:48)

__autoload通常被认为是过时的。它只允许一个自动加载器。通常,如果您使用的是不支持__autoload的PHP版本,则应该只使用spl_autload_register

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

UPDATE:

从PHP 7.2.0开始,

__autoload现已正式弃用,这意味着它现在正处于斩波区。如果您希望您的代码与PHP的未来版本兼容,那么您绝对不应该使用__autoload

答案 1 :(得分:2)

Documentation for "Autoloading Classes"读到:

  

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

Documentation for spl_autoload_register()读到:

  

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