Расширение псевдонима пространства имен PHP до полной строки пространства имен

Мне было интересно, есть ли способ расширить псевдоним пространства имен PHP, чтобы получить полный идентификатор пространства имен. Цель этого заключается в том, что наша фабрика создания объектов ожидает строку с полным пространством имен, чтобы она могла автоматически загрузить ее. Вот краткий пример:

<?php use my\namespace\area as MyArea; $goodObject = MyApp::factory('my\namespace\area\ClassName'); $badObject = MyApp::factory('MyArea\ClassName'); 

Я ищу какое-то общее решение, чтобы иметь возможность расширять этот псевдоним NS в любой ситуации, с чем-то эквивалентным:

 $desiredObject = MyApp::factory(resolve_namespace_alias('MyArea') . '\ClassName'); 

Если кто-нибудь из вас справится с этой проблемой, мне бы хотелось услышать о том, как вы это сделали.

Я не знаю, как разрешить строку, но класс из экземпляра объекта:

 use my\namespace\area as MyArea; $b = new MyArea; $c = get_class($b); echo $c; # my\namespace\area 

Этот вопрос несколько связан: не удается получить константу из динамического класса с использованием пространств имен .

Начиная с PHP 5.5 вы можете использовать MyArea::class ( https://wiki.php.net/rfc/class_name_scalars ).

В PHP 5.3+ вы можете использовать AliasExpander::expand('MyArea') ( https://github.com/milo/utils#aliasexpander ).