2015-10-06 54 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不客氣!如果您發現對您有用的答案,請考慮通過點擊投票櫃檯下方的綠色複選標記來接受答案。 :) –

相關問題