PHP命名空间的错误(该名称已被使用)
问题描述:
我试图运行在同一个文件中的代码:PHP命名空间的错误(该名称已被使用)
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!
答
这是因为在过去定义的命名空间是一个当前活动。 所以,当我键入:
use Foo1\Bar\SubBar;
我仍然在最后一个定义的命名空间:foo2的\酒吧\ 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;
干杯!
答
use
关键字用于导入要在当前文件范围内访问的名称空间。它没有作为一个命名空间“实例构造”。
您目前正在根据Foo2\Bar\SubBar
命名空间。
$foo2 = new SubBarClass;
$foo1 = new \Foo1\Bar\SubBar\SubBarClass;
没有必要使用use
对这些命名空间(尽管你可以,特别是当:像类目录,而你在这里,你应该从根(\
)访问其他命名空间他们共享父命名空间),它们已经在您使用它们的同一个文件中声明。
欲了解更多关于此信息,请考虑阅读手册,它描述了using multiple namespaces in the same file。
Thks for the answer :) – random425
@ random425不客气!如果您发现对您有用的答案,请考虑通过点击投票柜台下方的绿色复选标记来接受答案。 :) –