使用关键字和动态类名称

时间:2013-05-28 19:14:06

标签: php oop

use my\Project\FooClass;

$obj = new FooClass(); // ok
$name = 'FooClass';
$obj2 = new $name(); // throws an error that the class wasn't found

嗯,我相信标题和示例对我的问题的解释非常充分,所以只是 - 为什么会抛出错误,我应该如何处理?

3 个答案:

答案 0 :(得分:2)

可悲的是,由于PHP从命名空间导入/别名的方式,这是不可能的。这可以通过使用文字命名空间定义来解决,但毫无疑问它很糟糕。

如下:

$r = "my\\Project\\FooClass";
$k = new $r();

有一个补丁正在开发中,或者至少在几个月之后就是PHP的错误报告了。他们希望能为此做些什么。

如果它困扰你,顺便说一句,你可以使用class_alias()来补救它。

答案 1 :(得分:0)

尝试:

$obj2 = new $name;

删除括号

可替换地:

$obj2 = new {$name}();

答案 2 :(得分:0)

无法解释为什么这不起作用。但是对于如何处理它:

$name = 'FooClass';
$name = "my\\Project\\FooClass\\" . $name; // prepend namespace
$obj2 = new $name();