Получить пространство имен неполного имени класса

Рассмотрим следующий код 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? Или мне просто нужно написать полное имя самостоятельно?


person Magnar Myrtveit    schedule 03.06.2015    source источник
comment
и что должен вернуть fully_qualified_class_name('MyClass'), если существуют класс \foo\bar\MyClass и класс \foo\anotherbar\MyClass?   -  person Federkun    schedule 03.06.2015
comment
Этого никогда не произойдет, так как use foo\bar\MyClass; use foo\anotherbar\MyClass; приведет к фатальной ошибке: имя уже используется.   -  person Magnar Myrtveit    schedule 03.06.2015


Ответы (1)


Начиная с 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"
}
person Federkun    schedule 03.06.2015