class Manage
{
spl_autoload_register(function($class) {
include $class . '.class.php';
});
}
说我有一些类似上面的代码。我选择使用加载类的匿名函数方法,但这是如何使用的?它究竟是如何确定要加载哪个'$class'
的?
答案 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传递。它是尚未声明的类的名称,但在运行时的某处使用