php - 在一行中从变量名和命名空间启动一个实例
问题描述
$map_class_name = __NAMESPACE__.'\\'.$map_class_name;
$map = new $map_class_name;
有可能像这样在一行中做到这一点吗?
$map = new (__NAMESPACE__.'\\'.$map_class_name);
以上给出
语法错误,意外 '('
解决方案
答案是否定的,不能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");
推荐阅读
- java - CBC 和 CFB 模式下的 Java AES 未正确加密?四不尊重?
- javascript - 无论如何要从中删除波斯/阿拉伯数字或者在手机里?
- python - 尝试以 FASTA 格式读取文件,然后以 Genbank 格式写入另一个文件
- github - 如何在 Github Repo 上更改“通过上传添加文件”?
- python - 将数据转换为与 CSV 相同格式的 JSON
- python - 在python的For循环中获取索引
- java - 我可以执行哪些位掩码操作?
- javascript - 无法在客户端访问 cookie | NodeJS 和 JS
- c - 我应该在 C 中二维数组的 malloc 和 calloc 之后检查 NULL 指针吗?
- python - Python UnicodeDecodeError:“ascii”编解码器无法解码位置的字节 0xfc