【问题标题】:Duplicate symbol declaration for class name and imported class类名和导入类的重复符号声明
【发布时间】:2021-06-08 14:52:48
【问题描述】:

这是我的课:

namespace Controller\Reference;

use \Classes\Admin;

class Admin extends Controller
{
    public $data;
}

如果我想要use \Classes\Admin; 我会收到此错误:

重复的符号声明

但如果我使用 ASuse \Classes\Admin AS Admin1; 一样,我不会收到任何错误

我不想使用 AS 并将我的班级名称更改为 Admin1

如何使用Admin 类名和使用use \Classes\Admin; 而不给类名起别名?

【问题讨论】:

  • 你不能,这将是 2 个不同的类同名。如果您不想使用AS(不知道为什么),请不要将use 放在顶部,只需使用带有命名空间的完整类名来访问第二个管理类。例如。 new \Classes\Admin()
  • 为什么给它一个别名(使用AS)是个问题?这纯粹是为了美学,还是有“真实”的原因?毕竟,这实际上就是 AS 关键字的用途。你可以随心所欲地称呼它,这比专门的Admin1 更有意义。当问题的唯一描述是“我不想要...”时,我总是很谨慎。

标签: php oop


【解决方案1】:

您不能有 2 个具有相同名称的符号。这会使代码模棱两可,无法解析。

您可以为其中一个类设置别名(使用 as 关键字),或者使用外部类的完全限定名称。

class Admin extends Controller
{
    public $data;

    public function foo() {
        $admin = new \Classes\Admin();
    }
}

在任何情况下,实际上没有不使用别名的实际理由,但是如果您的代码标准、样式指南或其他任何内容阻止您为类设置别名……就不要这样做,也不要在没有导入的情况下这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-26
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多