20
class Manage
{

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

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

4

2 回答 2

26

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

于 2012-06-21T03:51:37.417 回答
15

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

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

于 2012-06-21T03:51:33.910 回答