use my\Project\FooClass;
$obj = new FooClass(); // ok
$name = 'FooClass';
$obj2 = new $name(); // throws an error that the class wasn't found
好吧,我相信标题和示例足以解释我的问题,所以只是 - 为什么会引发错误,我应该如何处理?
遗憾的是,由于 PHP 从命名空间导入/别名的方式,这是不可能的。这可以通过使用文字命名空间定义来解决,尽管它无疑很糟糕。
如下:
$r = "my\\Project\\FooClass";
$k = new $r();
有一个补丁正在开发中,或者至少,它在几个月前的 PHP 错误报告中。他们希望能对此有所作为。
顺便说一句,如果它困扰您,您可以使用class_alias()
它来解决它。
无法解释为什么这不起作用。但是对于如何处理它:
$name = 'FooClass';
$name = "my\\Project\\FooClass\\" . $name; // prepend namespace
$obj2 = new $name();
尝试:
$obj2 = new $name;
删除括号
或者:
$obj2 = new {$name}();