40

根据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';
}

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

顺便说一句,这里有很多关于这个主题的主题,但没有一个提供一个干净简单的解决方案来取代我性感的单线。

4

1 回答 1

69

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

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

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


2018 年对此的更新:实际上不应该有那么多场合需要滚动自己的自动加载器。有一个被广泛接受的标准(称为PSR-4)和几个符合要求的实现。这样做的明显方法是使用Composer

于 2012-05-21T15:11:19.207 回答