use my\Project\FooClass;
$obj = new FooClass(); // ok
$name = 'FooClass';
$obj2 = new $name(); // throws an error that the class wasn't found
嗯,我相信标题和示例对我的问题的解释非常充分,所以只是 - 为什么会抛出错误,我应该如何处理?
答案 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();