如何检查 Autoload 加载是否只使用 类?

How to check if Autoload loads only used classes?

Uisng spl_autoload_register 用于在我的代码中自动加载 classes。示例:

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

$obj = new MyClass1();
?>

如果我在我的代码中只使用 class MyClass1 会怎么样,自动加载会加载所有文件还是只加载 my_class1.php? 提前致谢。

编辑: 不要使用上面的代码。现在我使用 code with PSR-4 autoloading specifications

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

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

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

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

作为补充,您可以使用 PHP 函数 get_declared_classes(),它将列出当前脚本中所有已定义的 类。