2015-10-06 58 views
1

我试图运行在同一个文件中的代码: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!

回答

1

这是因为在过去定义的命名空间是一个当前活动。 所以,当我键入:

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; 

干杯!

2

use关键字用于导入要在当前文件范围内访问的名称空间。它没有作为一个命名空间“实例构造”

您目前正在根据Foo2\Bar\SubBar命名空间。

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

没有必要使用use对这些命名空间(尽管你可以,特别是当:像类目录,而你在这里,你应该从根(\)访问其他命名空间他们共享父命名空间),它们已经在您使用它们的同一个文件中声明。

欲了解更多关于此信息,请考虑阅读手册,它描述了using multiple namespaces in the same file

+1

Thks for the answer :) – random425

+0

@ random425不客气!如果您发现对您有用的答案,请考虑通过点击投票柜台下方的绿色复选标记来接受答案。 :) –

相关问题