【问题标题】:Cannot redeclare class using array for the classes names无法使用类名的数组重新声明类
【发布时间】:2015-10-08 10:33:52
【问题描述】:

我有一个类数组:

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

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

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

但是这样会引发错误“无法重新声明类用户/名称”,仅此而已。

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

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

有什么想法或解决方法吗?

【问题讨论】:

  • 您需要将类名声明为数组的一部分吗?为什么不直接使用它们?
  • 听起来你的自动加载器可能有错误。

标签: php class


【解决方案1】:

如果在您使用new 创建类的实例时正在定义您的类,则这意味着该类的代码正在由 PHP“自动加载器”加载。

如果您在执行new 时遇到定义类的错误,那么这意味着您的自动加载器中有错误。

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

您尚未向我们提供您的自动加载器代码,因此我无法为您提供确切的修复方法,但解决方案是修改它尝试定位类文件的代码,以确保它加载正确的文件。

如果您的程序文件结构和自动加载器的编写符合 PSR 标准,则不会发生此问题。 PSR 标准规定,类文件的组织应使其文件夹结构与命名空间相匹配。这使得编写始终找到正确文件的自动加载器变得容易。存在许多这样的自动加载器,事实上,如果您将 Composer 工具用于您的第三方库,那么它还为您的应用程序提供了一个符合 PSR 的自动加载器,因此您无需编写自己的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 2011-03-22
    • 2023-03-29
    • 2016-02-24
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多