考虑以下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 :(得分: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"
}