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

Sli*_*liq 19 php deprecated autoload spl-autoloader

http://php.net/manual/en/language.oop5.autoload.php神奇功能__autoload()将在即将到来的PHP版本变得过时和已删除(!).官方替代方案是spl_autoload().见http://www.php.net/manual/en/function.spl-autoload.php.但是php手册没有解释这个宝宝的正确使用方法.

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

function __autoload($class) {
    include 'classes/' . $class . '.class.php';
}
Run Code Online (Sandbox Code Playgroud)

使用spl_autoload()的版本?问题是:我无法弄清楚如何给该函数一个路径(它只接受命名空间).

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

lon*_*day 36

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

spl_autoload_register(function($class) {
    include 'classes/' . $class . '.class.php';
});
Run Code Online (Sandbox Code Playgroud)

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


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

  • 还值得一提的是,让您的自动加载成为 [PSR-0](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md) 可能是个好主意这几乎是标准(除了对旧 PEAR 约定的遗留支持)。如果您正在编写自己的自动加载器,这使得它与一些较大和流行的框架正在做的事情非常兼容。如果您不想自己编写而是使用指定的命名/存储约定,您可以使用现有的自动加载器组件。 (2认同)