如何使用 spl_autoload() 而不是 __autoload()



根据 http://php.net/manual/en/language.oop5.autoload.php,魔术函数__autoload()从 PHP 7.2.0 开始被弃用,从 PHP 8.0.0 开始被删除。

官方替代方案是 spl_autoload() . 请参阅 http://www.php.net/manual/en/function.spl-autoload.php。 但是PHP手册没有解释这个婴儿的正确使用。

我的问题:如何将这个(我的自动类自动加载机(替换为带有spl_autoload()的版本?

function __autoload($class) {
    include 'classes/' . $class . '.class.php';
}

问题:我无法弄清楚如何为该函数提供路径(它只接受命名空间(。

顺便说一下,SO上有很多关于这个话题的帖子,但没有一个给出一个干净简单的解决方案来取代我性感的单行。

您需要

spl_autoload_register注册自动加载函数。 您需要提供"可调用"。 从 5.3 开始,最好的方法是使用匿名函数:

spl_autoload_register(function($class) {
    include 'classes/' . $class . '.class.php';
});

当然,与__autoload相比,这样做的主要优点是可以多次调用spl_autoload_register,而__autoload(像任何函数一样(只能定义一次。如果您有模块化代码,这将是一个显着的缺点。


2018年对此进行了更新:实际上不应该有很多情况下您需要滚动自己的自动加载机。有一个被广泛接受的标准(称为PSR-4(和几个一致的实现。这样做的明显方法是使用Composer。

相关内容

  • 没有找到相关文章

最新更新