PHP实例化动态命名空间类

时间:2015-01-25 23:13:59

标签: php

我有一个类需要根据从表单传递的变量进行实例化。表单将字符串ProductSku传递给我的PHP脚本。需要实例化的完全限定类是:

$obj = new MyNameSpace\Product();

或者

$obj = new MyNameSpace\Sku();

我无法弄清楚如何在运行中正确创建此命名空间。我尝试了以下内容:

$obj = new "MyNameSpace\\".$class();

这引发了这个错误:

PHP Parse error:  syntax error, unexpected '"MyNameSpace\\"' (T_CONSTANT_ENCAPSED_STRING)

我已经阅读了其他问题和答案,这些问题和答案都是为了逃避斜线以使其成为字面意义上的斜线,但即便如此,这似乎也不适合我。例如:

$class = "Product";
$string = "MyNameSpace\\".$class;
echo $string;

$string打印为MyNameSpace\\Product而不是MyNameSpace\Product。我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

new关键字仅支持两种语法:

new ClassNameLiteral;

new $ClassNameString;

因此,您必须预先使用命名空间前缀组装您的类名:

$cn = "ns\\$class";
$obj = new $cn;

答案 1 :(得分:0)

请执行以下操作:

$class_name = 'Namespace\Class';
$instance = new $class_name;