如何检查自动加载加载刚刚使用的类?

时间:2018-08-21 17:42:07

标签: php class namespaces autoload spl-autoload-register

使用spl_autoload_register自动加载我的代码中的类。示例:

<?php    
spl_autoload_register(function ($class_name) { 
    include 'my_class1.php';
    include 'my_class2.php';
    //...
    include 'my_classN.php';
});

$obj = new MyClass1();
?>

如果我仅在代码中使用类MyClass1,会自动加载所有文件还是仅加载my_class1.php怎么办? 预先感谢。

编辑:请勿使用上述代码。现在,我将@Alex Howansky's代码与PSR-4自动加载specifications一起使用。

注意:如果类相对于basedir(see examples)位于子目录中,则自动加载功能需要使用名称空间。

2 个答案:

答案 0 :(得分:2)

使用此代码,您第一次引用任何类时,它将加载每个类。这会起作用,但几乎可以肯定不是您想要的。在自动加载器中,通常只需要加载一个包含$class_name引用的类的源文件。像这样:

spl_autoload_register(function ($class_name) {
    $filename = '/path/to/classes/' . $class_name . '.php';
    require_once $filename;
});

如果您的源文件名与您的类名不匹配,或者您无法根据类名确定源文件名,这显然变得非常困难。这就是为什么您应该使用PSR-4命名约定的原因。

答案 1 :(得分:2)

此外,您可以使用PHP函数get_declared_classes()来列出当前脚本中所有已定义的类。