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);