我有一个类需要根据从表单传递的变量进行实例化。表单将字符串Product
或Sku
传递给我的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
。我在这里缺少什么?
答案 0 :(得分:1)
new
关键字仅支持两种语法:
new ClassNameLiteral;
或
new $ClassNameString;
因此,您必须预先使用命名空间前缀组装您的类名:
$cn = "ns\\$class";
$obj = new $cn;
答案 1 :(得分:0)
请执行以下操作:
$class_name = 'Namespace\Class';
$instance = new $class_name;