如何使用spl_autoload_register?

时间:2012-06-21 03:47:55

标签: php spl-autoload-register

class Manage
{

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

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

2 个答案:

答案 0 :(得分:23)

你不能把代码放在那里。你应该在课后添加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'。然后在调用每个函数之后,它会检查该类是否存在。如果没有,它会继续,直到它到达列表的末尾。如果从未加载该类,则会发出致命错误,告诉您该类不存在。

答案 1 :(得分:13)

  

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

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