0
use my\Project\FooClass;

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

好吧,我相信标题和示例足以解释我的问题,所以只是 - 为什么会引发错误,我应该如何处理?

4

3 回答 3

2

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

如下:

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

有一个补丁正在开发中,或者至少,它在几个月前的 PHP 错误报告中。他们希望能对此有所作为。

顺便说一句,如果它困扰您,您可以使用class_alias()它来解决它。

于 2013-05-28T19:32:49.177 回答
0

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

$name = 'FooClass';
$name = "my\\Project\\FooClass\\" . $name; // prepend namespace
$obj2 = new $name();
于 2013-05-28T19:21:43.933 回答
0

尝试:

$obj2 = new $name;

删除括号

或者:

$obj2 = new {$name}();
于 2013-05-28T19:15:50.577 回答