如何使用spl_autoload_register?

Ste*_*eve 19 php spl-autoload-register

class Manage
{

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

说我有一些像上面这样的代码.我选择使用加载类的匿名函数方法,但这是如何使用的?它究竟是如何确定'$class'要加载的?

Bai*_*ker 24

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

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

spl_autoload_register(array('Manage', 'autoload'));
Run Code Online (Sandbox Code Playgroud)

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

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

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

UnloadedClass::someFunc('stuff');
Run Code Online (Sandbox Code Playgroud)

PHP将意识到尚​​未声明UnloadedClass.然后它将遍历SPL自动加载功能列表.它将使用一个参数调用每个函数:'UnloadedClass'.然后在调用每个函数之后,它会检查该类是否存在.如果没有,它会继续,直到它到达列表的末尾.如果从未加载类,您将收到一个致命错误,告诉您该类不存在.


zer*_*kms 14

它究竟是如何确定加载哪个'$ class'的?

$class是由php自动传递的.它是尚未声明的类的名称,但在运行时的某处使用