使用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)位于子目录中,则自动加载功能需要使用名称空间。
答案 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()来列出当前脚本中所有已定义的类。