自动加载不适用于变量

时间:2014-01-07 10:20:05

标签: php variables namespaces autoload

我想用变量自动加载一个类,但它不起作用。有人可以帮帮我吗? 我有一个带有A类的文件夹foo和一个包含5个类的子文件夹子文件(B类,C类,......)

在A类中我想要使用这些类,当我这样做时:

$obj = new classB(); 

一切正常。 当我这样做时:

$name = 'ClassB';
$obj = new $name();

有效。当我将B类从子文件夹移动到foo文件夹时,第二个脚本也可以工作。

有人可以帮帮我吗?

1 个答案:

答案 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