PHP名称空间错误(名称已在使用中)

时间:2015-10-06 16:31:11

标签: 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;

ideia是更改名称空间并回显相关值。 但是它返回了以下错误:

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

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

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

THKS!

2 个答案:

答案 0 :(得分:2)

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

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

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

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

有关此内容的详细信息,请参阅手册,其中介绍了using multiple namespaces in the same file

答案 1 :(得分:1)

这是因为最后定义的命名空间是当前活动的命名空间。 所以,当我输入:

use Foo1\Bar\SubBar;

我还在最后定义的命名空间:Foo2 \ Bar \ SubBar。 因此,当我输入:

use Foo2\Bar\SubBar;

我试图使用当前活动的命名空间。这就是返回致命错误的原因。

可能的解决方案是:

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 SubBar\SubBarClass;


echo '<br>';
$foo2 = new SubBarClass;

干杯!