PHP использует переменную для передачи нескольких аргументов в функцию

У меня есть функция, которая ожидает, что ей будут переданы 9 аргументов. Первый ожидаемый аргумент — строка, остальные — целые числа.

Вот функция:

 getProductPrice('red', 8, 1.6, 2.15, 0, 0, 0, 17.6, 0);

Когда это запускается, он работает нормально. Однако, когда я запускаю это так:

 getProductPrice("'red'".','.$arguments);

Это не работает.

"'red'".','.$arguments

выходы: «красный», 8, 1,6, 2,15, 0, 0, 0, 17,6, 0

Если бы кто-нибудь мог сказать мне, как использовать переменную $arguments вместо всех аргументов?

В итоге я подозревал, что это не работает, так это то, что $arguments выводит строку, поэтому я посмотрел, как преобразовать строку чисел, разделенных запятыми, в аргументы функции php.

Я наткнулся на это:

$params = explode(',', $str);
call_user_func_array("func", $params);

Я не могу понять, как использовать это решение по двум причинам:
1. Мне нужно передать строку вместе с числами.
2. Просто указать имя моей функции там, где в этом примере указано «func». не будет работать, потому что это функция cakephp, которая требует от меня поставить $this->ModelName->functionname, что разбивает первый аргумент в функции call_user_func_array()

Любые идеи, как помочь мне, ребята?

Я мог бы просто поместить переменные, которые заставляют $arguments выводить то, что они делают, но для получения каждого из этих чисел требуется тонна сложной логики и математики, поэтому вызовы моих функций выглядели бы нелепо.

Спасибо еще раз.


person user2278120    schedule 17.09.2013    source источник


Ответы (1)


Попробуйте заменить строку "func" на array($this->ModelName, 'functionname'). Первый элемент в этом массиве — это объект, для которого вы вызываете метод, второй — строковое представление имени этого метода. Таким образом, это должно работать:

$params = explode(',', $str);
call_user_func_array(array($this->ModelName, 'functionname'), $params);

Конечно, замените имена-заполнители на свои собственные.

person Tamás Barta    schedule 17.09.2013
comment
Это привело меня туда. Спасибо! Я приму ответ, как только это позволит мне. Мне также пришлось изменить 1-й аргумент на int, как и остальные, а затем преобразовать int в правильную строку на основе int внутри самой функции. - person user2278120; 17.09.2013