如何使用spl_autoload()作为__autoload()进行DEPRECATED

时间:2012-05-21 15:04:53

标签: php deprecated autoload spl-autoloader

根据http://php.net/manual/en/language.oop5.autoload.php,魔术函数__autoload()将在即将发布的PHP版本中变为DEPRECATED和DELETED(!)。官方替代方案是spl_autoload()。见http://www.php.net/manual/en/function.spl-autoload.php。但是php手册没有解释这个宝宝的正确使用方法。

我的问题:如何替换它(我的自动类自动加载器)

function __autoload($class) {
    include 'classes/' . $class . '.class.php';
}
带有spl_autoload()的版本

问题是:我无法弄清楚如何给该函数一个路径(它只接受命名空间)。

顺便说一下:在SO.com上有很多关于这个话题的主题,但没有一个提供干净的&简单的解决方案取代了我的性感单线。

1 个答案:

答案 0 :(得分:30)

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

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

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


2018年更新:当你需要推出自己的自动加载器时,应该没有多少次。有一个被广泛接受的标准(称为PSR-4)和几个符合要求的实现。显而易见的方法是使用Composer