是否可以使用如下变量导入名称空间:
$namespace = 'User\Authorization\Certificate';
use $namespace;
显然这不会运行,因为use
语句需要一个常量但是有解决方法吗?
修改:发现了一个gem(仅在PHP> 5.3中):class_alias($namespace, alias);
与use User\Authorization\Certificate as alias;
完全相同,所以将使用它。
答案 0 :(得分:2)
虽然无法将变量中的命名空间传递给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
答案 1 :(得分:0)
不,PHP期望use
遵循命名空间,而不是表达式(不包括常量)。请参阅Using namespaces: Aliasing/Importing。
但是,如果在系统中的某种聚合或编译阶段执行它之前动态更改PHP代码,则可以用一些看起来足够静态的变量数据替换文本。
但我不知道你的系统是否能够这样做。我可以想象一些stream wrapper或stream filter在飞行中这样做。它可以透明地处理插入变量命名空间名称。