распаковка массива аргументов в php

Python предоставляет оператор " * " для распаковки списка кортежей и предоставления их функции в качестве аргументов, например:

args = [3, 6]
range(*args)            # call with arguments unpacked from a list

Это эквивалентно:

range(3, 6)

кто-нибудь знает, есть ли способ достичь этого в PHP? Некоторые googling для вариаций "PHP Unpack" не сразу ничего не обнаружили.. возможно, это называется чем-то другим в PHP?

4 ответов


можно использовать call_user_func_array() для достижения этого:

call_user_func_array("range", $args); использовать ваш пример.


на php5.6 на ... оператор была добавлена. Используя его, вы можете избавиться от call_user_func_array() для этой более простой альтернативы. Например, имея функцию

function add($a, $b){
  return $a + $b;
}

и Ваш массив $list = [4, 6]; (после php5.5 Вы можете объявить массивы таким образом). Вы можете вызвать свою функцию с помощью ...:

echo add(...$list);


вы должны использовать call_user_func_array

call_user_func_array(array(CLASS, METHOD), array(arg1, arg2, ....))

http://www.php.net/call_user_func_array

или используйте api отраженияhttp://www.php.net/oop5.reflection


в некоторых сценариях вы можете использовать unpacking, что возможно в php, аналогично python:

list($min, $max) = [3, 6];
range($min, $max);

Это, как я пришел к этому ответу, по крайней мере. Поиск в Google: PHP argument unpacking