Рассмотрим следующий код 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
? Или мне просто нужно написать полное имя?
Из 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"
}
fully_qualified_class_name('MyClass')
должно возвращать, если существуют класс\foo\bar\MyClass
класс\foo\anotherbar\MyClass
?use foo\bar\MyClass; use foo\anotherbar\MyClass;
может привести к фатальной ошибке "имя уже используется".