根据 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。