gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:52:16 28 4
gpt4 key购买 nike

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com