PHP 命名空间错误(名称已被使用)

标签 php namespaces

我正在尝试在同一个文件上运行此代码:

namespace Foo1\Bar\SubBar;

class SubBarClass {

    public function __construct() {
        echo 'From Foo1';
    }

}



namespace Foo2\Bar\SubBar;

class SubBarClass {

    public function __construct() {
        echo 'From Foo2';
    }

}


use Foo1\Bar\SubBar;
$foo1 = new SubBarClass;


use Foo2\Bar\SubBar;
$foo2 = new SubBarClass;

想法是更改命名空间并回显相关值。
但它返回以下错误:

( ! ) fatal error :无法使用 Foo2\Bar\SubBar 作为 SubBar,因为该名称已在 C:\wamp\www\xxx\namespaces.php 第 30 行中使用

第 30 行:使用 Foo2\Bar\SubBar;

如何在同一个文件上交换命名空间?

谢谢!

最佳答案

use 关键字用于导入要在当前文件范围内访问的命名空间。它不充当命名空间“实例构造函数”。

您目前在 Foo2\Bar\SubBar 下命名空间。就像类目录一样,当您在这里时,您应该从根目录 ( \ ) 访问其他命名空间:

$foo2 = new SubBarClass;
$foo1 = new \Foo1\Bar\SubBar\SubBarClass;

没有必要使用 use 对于那些命名空间(尽管您可以,特别是当它们共享父命名空间时),它们已经在您使用它们的同一个文件中声明。

有关这方面的更多信息,请考虑阅读手册,其中描述了 using multiple namespaces in the same file .

关于PHP 命名空间错误(名称已被使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32975062/

相关文章:

php - 临时命名空间

C++ 运算符重载和关联的命名空间

php - 如何使用相对定位使主体低于标题?

java - 为什么可以通过在 Java 5 中设置 xmlns 属性而不是 Java 6 来更改 XML 文档 namespace ?

c# - C# 中是否有名称为 "LinqToVisualTree"的命名空间?

vue.js - 名称间距在 vuex 映射中不起作用,抛出模​​ block namespace 未找到

javascript - 在 PHP 中使用 HTML 标签

php - codeigniter如何设置没有路段和没有路段的路线

php - 使用按钮从表中删除数据行

php - 第413章 : Request entity too large apache php mysql