php - 如何使用 spl_autoload_register?

标签 php spl-autoload-register

class Manage
{

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

假设我有一些类似上面的代码。我选择使用加载类的匿名函数方法,但是这个是怎么用的呢?它究竟是如何确定要加载哪个 '$class' 的?

最佳答案

你不能把代码放在那里。您应该在课后添加 SPL 寄存器。如果你想在 Manage 类中注册一个函数,你可以这样做:

class Manage {
    public static function autoload($class) {
        include $class . '.class.php';
    }
}

spl_autoload_register(array('Manage', 'autoload'));

但是,正如您所演示的,您可以使用匿名函数。你甚至不需要上课,所以你可以这样做:

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

无论哪种方式,您指定的函数都会添加到负责自动加载的函数池中。您的函数已附加到此列表中(因此,如果列表中已经有任何函数,则您的函数将是最后一个)。有了这个,当你做这样的事情时:

UnloadedClass::someFunc('stuff');

PHP 会意识到 UnloadedClass 还没有被声明。然后它将遍历 SPL 自动加载函数列表。它将使用一个参数调用每个函数:'UnloadedClass'。然后在调用每个函数后,它会检查该类是否存在。如果没有,它会继续直到到达列表的末尾。如果该类从未加载,您将收到一个 fatal error ,告诉您该类不存在。

关于php - 如何使用 spl_autoload_register?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11131238/

相关文章:

php - 在 php 中用数组更新 Mysql Row

php - Slim Framework 3 - 如何将 $logger 注入(inject)路由 Controller

php - 检查今天的日期是否超过到期日期

php - 砌体不能正确 float - Bootstrap

命名空间中的 PHP 自动加载

使用命名空间时找不到 PHP 类

php - 以正确的方式使用 while 和 foreach 显示 mysql

无法通过 spl_autoload_register 加载具有命名空间的 PHP 类?

使用命名空间时,PHP spl_autoload_register 无法加载具有 require 范围的类

php - SPL_AUTOLOAD_REGISTER 覆盖 PHP 扩展