class Manage
{
spl_autoload_register(function($class) {
include $class . '.class.php';
});
}
假设我有一些类似上面的代码。我选择使用匿名函数方法来装入类,但是如何使用呢?它究竟是如何确定加载哪个'$class'
的?
发布于 2012-06-21 11:51:37
你不能把代码放在那里。您应该在类之后添加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'
。然后,在调用每个函数之后,它会检查类是否存在。如果不是,它会继续,直到它到达列表的末尾。如果类从未装入,您将收到一个致命错误,告诉您该类不存在。
https://stackoverflow.com/questions/11131238
复制相似问题