Intereting Posts
Ограничение параллельных / одновременных загрузок. Как узнать, отменена ли загрузка? Как удалить значения из массива в PHP? WordPress Неустранимая ошибка: допустимый размер памяти 536870912 байт исчерпан (пытался выделить 77 байт) в wp-includes / wp-db.php в строке 1832 Как получить массив определенного «ключа» в многомерном массиве без цикла Как заставить страницу не кэшироваться в PHP? codeigniter Disallowed Key Characters – если все символы разрешены Как получить значение из ответа SOAP с помощью PHP? Тип данных mysqli_fetch_field PHP Параметр JSON позволяет не устанавливать фрагменты PHP: получить идентификатор LINUX команды Будет ли значение набора $ _SERVER пустой строкой? Редактор шаблонов электронной почты, аналогичный редактору кампаний как переформатировать число с запятыми symfony2 добавить динамический параметр для маршрутизации, попробуйте с помощью пользовательского загрузчика Неустранимая ошибка: класс «Дотенев \ Дотенев» не найден в

PHP: массив для значений переменных переменной функции

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

Надеюсь, что есть простой способ сделать это, но я не понимаю, как это сделать.

Код, который я пишу, будет вызывать метод в классе, но я не буду знать имя метода и сколько его параметров.

Я пробовал это, но это не работает:

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