导入变量名称空间

时间:2011-06-19 18:38:01

标签: php namespaces

是否可以使用如下变量导入名称空间:

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

显然这不会运行,因为use语句需要一个常量但是有解决方法吗?

修改:发现了一个gem(仅在PHP> 5.3中):class_alias($namespace, alias);use User\Authorization\Certificate as alias;完全相同,所以将使用它。

2 个答案:

答案 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 wrapperstream filter在飞行中这样做。它可以透明地处理插入变量命名空间名称。