我正在尝试在同一个文件上运行此代码:
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/