无法使用数组为类名重新声明类

时间:2015-10-08 10:33:52

标签: php class

我有一系列课程:

$array_items = [
    'User\Name',
    'Item\Name'
];

我需要从每个方法执行一个方法,如:

foreach ($array_items as $class)
    (new $class)->get();
endforeach;

但是这样会抛出一个错误“无法重新声明类User / Name”,就是这样。

如果我试试这个,那没关系(当然它输出用户/名称两次):

foreach ($array_items as $class)
    (new \User\Name)->get();
endforeach;

为什么会发生这种情况或解决方法?

1 个答案:

答案 0 :(得分:1)

如果在使用sed -n "/$a/,/$b/p" abc.txt 创建它们的实例时定义了类,则意味着该类的代码由PHP"自动加载器加载#34;。

如果您在执行new时遇到定义课程的错误,则表示您的自动加载器中存在错误。

在这种情况下,错误消息暗示当您执行new时,自动加载器会错误地打开new Item\Name类的文件。打开此文件时,PHP会尝试运行它,并抛出错误,因为已经定义了类。

您还没有向我们提供自动加载器代码,因此我无法为您提供准确的修复,但解决方案是修改代码,尝试找到类文件以确保加载正确的文件。

如果您的程序的文件结构和自动装带器的编写符合PSR标准,则不会出现此问题。 PSR标准声明应该组织类的文件,使其文件夹结构与命名空间匹配。这样可以轻松编写始终找到正确文件的自动加载器。存在许多此类自动加载器,实际上,如果您将Composer工具用于第三方库,那么它还为您的应用程序提供了符合PSR标准的自动加载器,因此您不需要自己编写。