我正在尝试在同一个文件上运行此代码:
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!
答案 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;
干杯!