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

osd*_*iab 10 php alias namespaces class

在PHP中,如果我想获得一个use声明中包含的类的完全限定类名,我该怎么做?例如,

<?php
namespace MyNamespace;

use Namespace\To\Class as MyClass;

function getNamespaceOfMyClass() {
    // Return ??
}

echo getNamespaceOfMyClass();
Run Code Online (Sandbox Code Playgroud)

我知道有一种方法可以做get_class(new MyClass()),但如果我不能/不想做一个实例MyClass呢?谢谢!

Jon*_*Jon 24

在PHP 5.5以后,您可以使用::class以下方法执行此操作:

echo MyClass::class;
Run Code Online (Sandbox Code Playgroud)

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


fel*_*ins 5

在早期的 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();
Run Code Online (Sandbox Code Playgroud)

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

注意
自 PHP 5.4 起:

$classname = (new \ReflectionClass(new Type\DateType))->getName();
Run Code Online (Sandbox Code Playgroud)