我想用变量自动加载一个类,但它不起作用。有人可以帮帮我吗? 我有一个带有A类的文件夹foo和一个包含5个类的子文件夹子文件(B类,C类,......)
在A类中我想要使用这些类,当我这样做时:$obj = new classB();
一切正常。 当我这样做时:
$name = 'ClassB';
$obj = new $name();
有效。当我将B类从子文件夹移动到foo文件夹时,第二个脚本也可以工作。
有人可以帮帮我吗?
答案 0 :(得分:0)
在这种情况下,我不认为你是如何实例化你的对象,而是更多你如何自动加载你的类。
此时我会假设你知道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
中。
因此,您需要更改自动加载器功能以反映新的子目录,因为除非您告诉它,否则PHP不会考虑更深入地查看目录结构:
$file = 'subfoo/' . $class . '.class.php'; // Same E.g. will now look for subfoo/ClassB.class.php