使用数组中的参数调用Symfony Repository方法

时间:2019-02-19 14:30:10

标签: php arrays symfony parameters

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中找到。其他功能,只是在这里传递。伙计们请注意这一点-这是动态的,数组中可以有任意数量的参数,它当然与函数中的参数相同,但是当参数应该用逗号指定并且我有数组时如何调用函数?

2 个答案:

答案 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

call_user_func_array([
        $this->em->getRepository($info['repoName']), $info['funcName']
    ], 
    $arr['params']
);