php - 使用数组中的参数调用 Symfony 存储库方法
问题描述
symfony 3.4
我必须调用一个函数
$this->em->getRepository($info['repoName'])->$info['funcName']->(//params
问题是我的函数有像昏迷这样的参数
functionName($param1, $param2);
我在 $arr['params'] 中收到一个包含此参数值的数组非常重要!我将无法像这样调用它,functionName($arr['params'][0], $arr['params'][1])
因为我永远不会知道使用了哪个 repo 中的哪个函数以及它有多少参数,所有信息都存储在 yml 中,从那里获取,数据只是在其他函数中找到并刚刚通过这里。各位大侠请注意——这是动态的,数组中可能有任意数量的参数,当然与函数中的参数相同,但是当参数应该用逗号指定并且我有一个数组时如何调用函数?
解决方案
根据您的 PHP 版本,有不同的方法。我个人更喜欢参数解包,也称为 splat-operator:
$this->em->getRepository($info['repoName'])->$info['funcName']->(...$info['params']);
此功能在 PHP 5.6 中引入,请参阅:https ://secure.php.net/manual/en/migration56.new-features.php#migration56.new-features.splat
另一种常见的方法是call_user_func_array
在你提供一个可调用的地方,以便在哪个对象上调用什么方法,然后是一个参数数组。在您的情况下,它可能看起来像这样:
call_user_func_array([$this->em->getRepository($info['repoName']), $info['funcName']], $info['params']);
推荐阅读
- angular - Chart.js 3+、Firefox 68 和 Angular:“ReferenceError:“ResizeObserver 未定义”
- javascript - 无论深度如何,如何获取根子元素的当前索引
- android - 中止崩溃“/apex/com.android.runtime/lib64/bionic/libc.so”
- html - 控制 html 中的图像缓存?
- module - Magento 2 - 外部属性和模块序列
- assembly - MIPS 架构
- rundeck - 有没有办法在 Rundeck 的失败执行中禁用超级详细的错误消息?
- r - 使用 ggplot facet_grid 或 facet_wrap 时修改面板轴的特定主题参数
- postgresql - 使用 Postgres 重用查询计算
- sql - 创建临时表并加入它们