2017-04-14 85 views
0

從我下面的代碼,我嘗試用namespace foo; 調用sayHi的方法,在課堂貓,但它不能正常工作,我必須使用「使用」改變名稱來稱呼它;2命名空間相同的類名 - 是它需要使用「使用」的別名調用第一個命名空間?

<?php 

    namespace foo; 

    class Cat 
    { 
     public static function sayHi() 
     { 
      echo "Meow"; 
     } 
    } 

    namespace bar; 

    class Cat 
    { 
     public static function sayHi() 
     { 
      echo "Hello"; 
     } 
    } 


    foo\Cat::sayHi(); //try to use backslash path but Fatal error: Class 'bar\foo\Cat' not found 

?> 

如果我用Cat::sayHi();它始終調用從我不想命名空間欄的方法。所以問題:是否存在,如果不使用「use」別名解決這個問題的任何方法?

回答

3

在聲明命名空間,你的代碼命名空間中,直到你聲明另一個,或直到文件結束運行。你這樣做:

namespace foo; 
class Cat {} 
namespace bar; 
class Cat {} 
// here you are in namespace bar 
foo\Cat::sayHi(); 

既然你已經在酒吧命名空間,命名空間參考並不錨定根命名空間,這最後一行被解釋爲:

\bar\foo\Cat::sayHi(); 

簡單錨到根:

\foo\Cat::sayHi(); 

或把您的電話foo\Cat::sayHi();在另一個文件中。