不能使用数组作为类名重新声明类


Cannot redeclare class using array for the classes names

我有一个类数组:

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

我需要从它们中的每一个执行一个方法,如:

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

但是这样就会抛出一个错误"Cannot redeclare class User/Name",就是这样。

如果我尝试这个,它是好的(但当然它输出两次用户名):

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

知道为什么会发生这种情况,或者解决方法吗?

当你使用new创建一个类的实例时,如果你的类正在被定义,那么这意味着类的代码正在被PHP的"自动加载器"加载。

如果你在做new时得到定义类的错误,那么这意味着你的自动加载器有错误。

在这种情况下,错误消息意味着当您执行new Item'Name时,自动加载程序不正确地打开了User'Name类的文件。当这个文件被打开时,PHP试图运行它,并抛出错误,因为其中的类已经被定义了。

你还没有给我们你的自动加载器代码,所以我不能给你一个确切的修复,但解决方案将是修改代码,它试图定位类文件,以确保它加载正确的文件。

如果你的程序的文件结构和你的自动加载程序是按照PSR标准编写的,那么这个问题就不会发生。PSR标准指出,类的文件应该组织成这样,即它们的文件夹结构与名称空间匹配。这使得编写一个总能找到正确文件的自动加载程序变得容易。有很多这样的自动加载器存在,如果您为第三方库使用Composer工具,那么它还为您的应用程序提供了一个PSR兼容的自动加载器,因此您不需要编写自己的自动加载器。