Расширение псевдонима пространства имен PHP до полной строки пространства имен - PullRequest
9 голосов
/ 26 октября 2011

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

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

Ответы [ 2 ]

1 голос
/ 20 мая 2013

Начиная с 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).

1 голос
/ 26 октября 2011

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

use my\namespace\area as MyArea;

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...