$map_class_name = __NAMESPACE__.'\\'.$map_class_name;
$map = new $map_class_name;
是否可以像这样一行完成?
$map = new (__NAMESPACE__.'\\'.$map_class_name);
上面给出了
语法错误,意外的'('
答案 0 :(得分:3)
答案是否定的,您不能将new
与字符串或表达式一起使用。
但是您可以使用
$map = new $map_class_name;
由于您使用的是当前命名空间(__NAMESPACE__
)中的类,因此不必在类名前面添加前缀,因此将隐含命名空间。
您可以使用Reflection
$map = (new \ReflectionClass(__NAMESPACE__."\\$map_class_name"))->newInstance();
另一种方法是不中断行,但是我想这很重要。
$map_class_name = __NAMESPACE__.'\\'.$map_class_name; $map = new $map_class_name;
IIFE也可以
$map = (function($n){return new $n;})(__NAMESPACE__."\\$map_class_name");