如何检查 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(),它将列出当前脚本中所有已定义的 类。
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
?
提前致谢。
编辑: 不要使用上面的代码。现在我使用
注意:如果 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(),它将列出当前脚本中所有已定义的 类。