PHP obter todos os argumentos como matriz?
Pergunta
Ei, eu estava trabalhando com uma função PHP que leva vários argumentos e formata-los. Atualmente, estou trabalhando com algo como isto:
function foo($a1 = null, $a2 = null, $a3 = null, $a4 = null){
if ($a1 !== null) doSomethingWith($a1, 1);
if ($a2 !== null) doSomethingWith($a2, 2);
if ($a3 !== null) doSomethingWith($a3, 3);
if ($a4 !== null) doSomethingWith($a4, 4);
}
Mas eu queria saber se eu posso usar uma solução como esta:
function foo(params $args){
for ($i = 0; $i < count($args); $i++)
doSomethingWith($args[$i], $i + 1);
}
Mas ainda invocar a função da mesma forma, semelhante aos params palavra-chave em C # ou a matriz de argumentos em JavaScript.
Solução
func_get_args
retorna um array com todos os argumentos da atual função.
Outras dicas
Se você usar o PHP 5.6+, agora você pode fazer isso:
<?php
function sum(...$numbers) {
$acc = 0;
foreach ($numbers as $n) {
$acc += $n;
}
return $acc;
}
echo sum(1, 2, 3, 4);
?>
Fonte: http://php.net/ / en / functions.arguments.php # functions.variable-arg-list manual de
Ou a partir de PHP 7.1 que agora são capazes de usar uma dica tipo chamado iterable
function f(iterable $args) {
foreach ($args as $arg) {
// awesome stuff
}
}
Além disso, ele pode ser usado em vez de Traversable
quando você iterar usando uma interface. Assim como ele pode ser usado como um gerador que produz os parâmetros.