symfony 3.4
我必须调用一个函数
$this->em->getRepository($info['repoName'])->$info['funcName']->(//params
问题是我的函数具有像逗号一样的参数
functionName($param1, $param2);
,我收到一个数组,其中包含此参数的值
$ arr ['params']
很重要!
我将无法像functionName($arr['params'][0], $arr['params'][1])
那样称呼它,因为我永远不知道使用了哪个仓库以及它具有多少参数,所有这些信息都存储在yml中,从那里获取,数据只能在yml中找到。其他功能,只是在这里传递。伙计们请注意这一点-这是动态的,数组中可以有任意数量的参数,它当然与函数中的参数相同,但是当参数应该用逗号指定并且我有数组时如何调用函数?
答案 0 :(得分:3)
根据您的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']);
答案 1 :(得分:1)
call_user_func_array([
$this->em->getRepository($info['repoName']), $info['funcName']
],
$arr['params']
);