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

2022-08-30 11:30:51

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

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

我的问题:如何用?spl_autoload()

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

问题:我不知道如何为该函数提供路径(它只接受命名空间)。

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


答案 1

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

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

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


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


答案 2

推荐