desembalar uma matriz de argumentos em php
-
08-07-2019 - |
Pergunta
Python fornece ao operador "*" para descompactar uma lista de tuplas e dando-lhes a uma função como argumentos, assim:
args = [3, 6]
range(*args) # call with arguments unpacked from a list
Isto é equivalente a:
range(3, 6)
Alguém sabe se existe uma maneira de conseguir isso em PHP? Alguns googling para variações de "PHP Descompacte" não imediatamente virou-se nada .. talvez ele é chamado de algo diferente em PHP?
Solução
Você pode usar call_user_func_array()
para conseguir isso:
call_user_func_array("range", $args);
usar o seu exemplo.
Outras dicas
Em php5.6
o operador ...
foi adicionado. Usando ele, você pode se livrar de call_user_func_array()
para esta alternativa mais simples. Por exemplo, ter uma função
function add($a, $b){
return $a + $b;
}
e seu $list = [4, 6];
array (após php5.5 você pode declarar matrizes desta forma).
Você pode chamar sua função com ...
:
echo add(...$list);
Você deve usar o call_user_func_array
call_user_func_array(array(CLASS, METHOD), array(arg1, arg2, ....))
http://www.php.net/call_user_func_array
ou usar a api reflexão http://www.php.net/oop5.reflection
Em determinados cenários, você pode considerar o uso unpacking
, o que é possível em php, é uma maneira semelhante ao python:
list($min, $max) = [3, 6];
range($min, $max);
Isto é como eu ter chegado a esta resposta, pelo menos.
Pesquisa Google: PHP argument unpacking