我想用一个变量自动加载一个类,但它不起作用。有人可以帮我吗?
我有一个带有 A 类的文件夹 foo 和一个包含 5 个类(B 类、C 类……)的子文件夹 subfoo
在 A 类中,我想使用这些类,当我这样做时:
$obj = new classB();
它工作正常。
当我这样做时:
$name = 'ClassB';
$obj = new $name();
有用。当我将 B 类从子文件夹移动到 foo 文件夹时,第二个脚本也有效。
有人可以帮我吗?
最佳答案
在这种情况下,我认为这不是您实例化对象的方式,而是您自动加载类的方式。
在这一点上,我假设您知道 php's ability to let you autoload classes .如果你不这样做,那么我需要知道你有什么设置(框架?任何帮助类?),因为这可能是为你做自动加载。
看来您需要配置自动加载功能。
这是我认为您的自动加载功能的基本示例:
function my_autoloader($class) {
$file = $class . '.class.php'; // E.g. ClassB.class.php
if(file_exists($file)) {
require_once($file);
}
}
spl_autoload_register('my_autoloader');
在这种情况下,它正在检查当前工作目录以查看文件
{$class}.class.php
存在。在上面的场景中,您提到将类移动到子目录
subfoo
中。 .因此,您需要更改自动加载器函数以反射(reflect)新的子目录,因为 PHP 不会考虑更深入地查看目录结构,除非您告诉它:
$file = 'subfoo/' . $class . '.class.php'; // Same E.g. will now look for subfoo/ClassB.class.php
关于php - 自动加载不适用于变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20969072/