У меня есть массив переменной длины, который мне нужно перенести в список параметров для функции.
Надеюсь, что есть простой способ сделать это, но я не понимаю, как это сделать.
Код, который я пишу, будет вызывать метод в классе, но я не буду знать имя метода и сколько его параметров.
Я пробовал это, но это не работает:
$params = array(1 => "test", 2 => "test2", 3 => "test3"); ClassName::$func_name(implode($params, ","));
Вышеприведенные выражения объединяют все значения в первый параметр функции. В то время как он должен вызывать функцию с тремя значениями параметров (test, test2, test3).
Мне нужно следующее:
ClassName::$func_name("test", "test2", "test3");
Любые идеи, как сделать это аккуратно?
Да, используйте 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));
Вы можете использовать eval
:
eval("$func_name(" . implode($params, ",") . ");");
Хотя вам, возможно, понадобится сделать лямбда-обман, чтобы ваши параметры были указаны и / или экранированы:
$quoted_escaped_params = array_map(create_function('$a', 'return "\"". str_replace("\"",` "\\\"", $a) . "\""'), $params);