Мне было интересно, есть ли способ расширить псевдоним пространства имен 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 ).