распаковка массива аргументов в php - PullRequest
23 голосов
/ 16 ноября 2008

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

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

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

range(3, 6)

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

Ответы [ 4 ]

22 голосов
/ 16 ноября 2008

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

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

16 голосов
/ 19 апреля 2014

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

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

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

echo add(...$list);

4 голосов
/ 16 ноября 2008

Вы должны использовать 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

3 голосов
/ 04 сентября 2015

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

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

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

...