Вызовите метод репозитория Symfony с параметрами из массива - PullRequest
0 голосов
/ 19 февраля 2019

symfony 3.4

Мне нужно вызвать функцию

$this->em->getRepository($info['repoName'])->$info['funcName']->(//params

проблема в том, что моя функция имеет параметры по коме, такие как

functionName($param1, $param2);

, и я получаюмассив со значениями этих параметров в $ arr ['params'] ОЧЕНЬ ВАЖНО!Я не смогу назвать его как functionName($arr['params'][0], $arr['params'][1]), потому что никогда не узнаю, какая функция из какого репо используется и сколько у нее параметров, вся эта информация хранится в yml, откуда берется, данные просто находятся в других функцияхи только что прошел здесь.Ребята, обратите на это внимание - это динамическое, в массиве может быть любое количество параметров, и оно, конечно, такое же, как и в функции, но как вызвать функцию, когда параметры должны быть указаны с комой, а у меня есть массив?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

В зависимости от вашей версии PHP существуют разные подходы.Я лично предпочитаю распаковку аргументов, также называемую оператором сплат:

$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']);
0 голосов
/ 19 февраля 2019

Попробуйте call_user_func_array :

call_user_func_array([
        $this->em->getRepository($info['repoName']), $info['funcName']
    ], 
    $arr['params']
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...