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.
在早期的 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)