php - 自动加载不适用于变量

标签 php variables namespaces autoload

我想用一个变量自动加载一个类,但它不起作用。有人可以帮我吗?
我有一个带有 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/

相关文章:

Javascript替换/修改变量指向的对象?

ruby-on-rails - 如何在 Ruby on Rails 中以编程方式查找命名空间/模块名称?

c++ - 声明一个静态常量和一个常量到未命名的命名空间有什么区别?

php - 如何将 mySQL 的输出查询放入 php int 变量

php - 将 PHP 与 Linux 服务器上的 Paradox .db 文件连接

mysql - 将 php 变量作为字符串传递给 mysql 作为 SELECT 的一部分

python - 删除模块以清理命名空间?

php - 一个 Web 框架,其中 AJAX 不是事后的想法

javascript - 如何阻止机器人提交网络表单

java - 隐藏变量值