PHP: массив для значений переменных переменной функции
У меня есть массив переменной длины, который мне нужно перенести в список параметров для функции.
Я надеюсь, что есть простой способ сделать это, но я не вижу, как это сделать.
Код, который я пишу, будет вызывать метод в классе, но я не буду знать имя метода и сколько его параметров.
Я пробовал это - но он не работает:
$params = array(1 => "test", 2 => "test2", 3 => "test3");
ClassName::$func_name(implode($params, ","));
Приведенные выше выражения объединяют все значения в первый параметр функции. В то время как он должен вызывать функцию с тремя значениями параметров (test, test2, test3).
Мне нужно это:
ClassName::$func_name("test", "test2", "test3");
Любые идеи, как это сделать аккуратно?
Ответы
Ответ 1
Да, используйте call_user_func_array()
:
call_user_func_array('function_name', $parameters_array);
Вы также можете использовать это для вызова методов в классе:
class A {
public function doStuff($a, $b) {
echo "[$a,$b]\n";
}
}
$a = new A;
call_user_func_array(array($a, 'doStuff'), array(23, 34));
Ответ 2
Вы можете использовать eval
:
eval("$func_name(" . implode($params, ",") . ");");
Хотя вам может понадобиться сделать лямбда-обман, чтобы ваши параметры были указаны и/или экранированы:
$quoted_escaped_params = array_map(create_function('$a', 'return "\"". str_replace("\"",` "\\\"", $a) . "\""'), $params);