11

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

<?php
namespace MyNamespace;

use Namespace\To\Class as MyClass;

function getNamespaceOfMyClass() {
    // Return ??
}

echo getNamespaceOfMyClass();

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

4

2 回答 2

24

在 PHP 5.5 及以后的版本中,您可以使用::class

echo MyClass::class;

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

于 2013-11-08T23:10:43.307 回答
5

在早期的 PHP 版本(即 PHP < 5.5)上,您可以通过反射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();
于 2015-12-09T14:27:26.790 回答