首页 > 解决方案 > 在一行中从变量名和命名空间启动一个实例

问题描述

$map_class_name = __NAMESPACE__.'\\'.$map_class_name;
$map = new $map_class_name;

有可能像这样在一行中做到这一点吗?

$map = new (__NAMESPACE__.'\\'.$map_class_name);

以上给出

语法错误,意外 '('

标签: php

解决方案


答案是否定的,不能new与字符串或表达式一起使用。

但是你可以使用

$map = new $map_class_name;

由于您使用当前命名空间(__NAMESPACE__)中的类,因此不必为类名添加前缀,因此将隐含命名空间。

替代解决方案

您可能会使用反射

$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");

推荐阅读