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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top