2015-06-03 15 views
1

的命名空間考慮下面的PHP代碼獲取不合格的類名

namespace foo\bar; 

class MyClass {} 

namespace xyz; 
use foo\bar\MyClass; 

class OtherClass {} 

$a = new MyClass(); 
$b = new OtherClass(); 

$a\foo\bar\MyClass一個實例,而$b\xyz\OtherClass一個實例。這些完全合格的班級名稱,我可以致電get_class($a)get_class($b)。但有沒有辦法獲得完全限定的名稱而不實例化對象?有沒有像神奇功能fully_qualified_class_name這樣的fully_qualified_class_name('MyClass')會返回\foo\bar\MyClassfully_qualified_class_name('OtherClass')會返回\xyz\OtherClass?或者我只需要自己寫完整的名字?

+0

什麼'fully_qualified_class_name( 'MyClass的')使用類名稱解析'應該返回,如果存在'\富\酒吧\ MyClass'類和'\ foo \ anotherbar \ MyClass'類? – Federkun

+0

這絕不會發生,因爲'use foo \ bar \ MyClass;使用foo \ anotherbar \ MyClass;'會導致致命的「名稱已被使用」 - 錯誤。 –

回答

2

從PHP 5.5,你可以通過::class

namespace foo\bar { 
    class MyClass {} 
} 

namespace xyz { 
    use foo\bar\MyClass; 

    class OtherClass {} 

    echo 'OtherClass namespace: ', OtherClass::class, "\n"; // print "OtherClass namespace: xyz\OtherClass" 
    echo 'MyClass namespace: ', MyClass::class, "\n"; // print "MyClass namespace: foo\bar\MyClass" 
}