PHP: Как получить полное имя класса из псевдонима?

В PHP, если я хочу получить полное имя класса класса, включенного в оператор use, как это сделать? Например,

<?php
namespace MyNamespace;

use Namespace\To\Class as MyClass;

function getNamespaceOfMyClass() {
    // Return ??
}

echo getNamespaceOfMyClass();

Я знаю, что один способ - сделать get_class(new MyClass()), но что, если я не могу/не хочу делать экземпляр MyClass? Спасибо!

Ответ 1

В PHP 5.5 и далее вы можете сделать это с помощью ::class:

echo MyClass::class;

К сожалению, это невозможно вообще в более ранних версиях, где вам нужно либо жестко указать имя класса, либо создать экземпляр сначала, и использовать get_class на нем.

Ответ 2

В ранней версии 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();