2015-06-03 3 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\MyClass, а fully_qualified_class_name('OtherClass') вернет \xyz\OtherClass? Или мне просто нужно написать полное имя?

+0

и то, что 'fully_qualified_class_name ('MyClass')' должен вернуться, если существует '\ Foo \ бар \ MyClass' класс и' \ foo \ anotherbar \ класс MyClass'? – Federkun

+0

Этого никогда не будет, как 'use foo \ bar \ MyClass; используйте foo \ anotherbar \ MyClass; 'приведет к фатальному" имени уже используется "-error. –

ответ

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" 
} 
Смежные вопросы