PHP:如何从别名中获取完全限定的类名


PHP: How to get a fully qualified class name from an alias?

在PHP中,如果我想获取包含在use语句中的类的完全限定类名,我该怎么做?例如

<?php
namespace MyNamespace;
use Namespace'To'Class as MyClass;
function getNamespaceOfMyClass() {
    // Return ??
}
echo getNamespaceOfMyClass();

我知道一种方法是做get_class(new MyClass()),但是如果我不能/不想做MyClass的实例怎么办?谢谢!

在 PHP 5.5 及更高版本中,您可以使用 ::class 执行此操作:

echo MyClass::class;

不幸的是,这在早期版本上根本不可能,您必须对类名进行硬编码,或者首先创建一个实例并在其上使用get_class

在早期的 PHP 版本(即 PHP <5.5)上,您可以通过 Reflection API 获取类名,如下所示:

namespace App'Core;
use Symfony'Component'Form'Extension'Core'Type;
class MyClass {}
$refclass = new 'ReflectionClass(new Type'DateType);
print $refclass->getName();
$refclass = new 'ReflectionClass(new MyClass());
print $refclass->getName();

当然,如果这对您的情况来说并不昂贵。

注意
从 PHP 5.4 开始:

$classname = (new 'ReflectionClass(new Type'DateType))->getName();