Python предоставляет оператор «*» для распаковки списка кортежей и предоставления им функции в качестве аргументов, например:
args = [3, 6] range(*args) # call with arguments unpacked from a list
Это эквивалентно:
range(3, 6)
Кто-нибудь знает, есть ли способ достичь этого в PHP? Некоторые поисковые запросы по вариантам «PHP Unpack» не сразу принесли что-либо … возможно, это называется чем-то другим в PHP?
Вы можете использовать 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