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

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\bar\MyClass класс \foo\anotherbar\MyClass ?
  • 0
    Этого никогда не произойдет, так как use foo\bar\MyClass; use foo\anotherbar\MyClass; может привести к фатальной ошибке "имя уже используется".
Теги:
namespaces

1 ответ

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"
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню