Импорт пространств имен переменных - PullRequest
3 голосов
/ 19 июня 2011

Можно ли импортировать пространства имен, используя переменную, подобную этой:

$namespace = 'User\Authorization\Certificate';
use $namespace;

Очевидно, что это не будет работать, поскольку оператор use ожидает константу, но есть ли обходной путь?

Редактировать: Обнаружен камень (только в PHP> 5.3): class_alias($namespace, alias);, который делает почти то же самое с use User\Authorization\Certificate as alias;, поэтому будет использовать его.

Ответы [ 2 ]

2 голосов
/ 19 июня 2011

Хотя невозможно передать пространство имен в переменной в use, вы можете поместить пространство имен и ожидаемое «короткое» имя класса в переменную и использовать его в большинстве мест, где вам это понадобится, например, вызовите new.

$namespace = '\foo\bar';
$class = 'baz';
$fully_qualified = $namespace . '\\'. $class; // \foo\bar\baz
$a_foo_bar_baz = new $fully_qualified(...);
var_dump( $a_foo_bar_baz instanceof $fully_qualified ); // true
0 голосов
/ 19 июня 2011

Нет, PHP ожидает, что use будет следовать за пространством имен, а не выражением (которое включает в себя не константу).См. Использование пространств имен: псевдоним / импорт .

Однако, если вы измените код PHP на лету перед его выполнением в какой-либо фазе агрегации или компиляции в вашей системе, вы можете заменить текстс некоторыми переменными данными, которые выглядят достаточно статичными для PHP.

Но я понятия не имею, способна ли ваша система сделать это.Я мог бы представить себе потоковую оболочку или потоковый фильтр , делающую это на лету.Он может прозрачно позаботиться о вставке имени пространства имен переменной.

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