class Manage
{
spl_autoload_register(function($class) {
include $class . '.class.php';
});
}
假设我有一些类似上面的代码。我选择使用加载类的匿名函数方法,但是这个是怎么用的呢?它究竟如何确定'$class'
要加载哪个?
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'
. 然后在调用每个函数后,它会检查该类是否存在。如果没有,它会继续直到到达列表的末尾。如果该类从未加载,您将收到一个致命错误,告诉您该类不存在。
它究竟是如何确定要加载哪个“$class”的?
由$class
php 自动传递。它是尚未声明的类的名称,但在运行时某处使用