Desempacotamento de Parâmetros em Funções no PHP (operador splat)

Artigo que explica como funciona o desempacotamento de parâmetros e funções e métodos no PHP, recurso lançado no PHP 5.6.

Introdução

No artigo anterior, falamos sobre Funções Variádicas, que ganhou uma sintaxe nova no PHP 5.6. Neste artigo, veremos um recurso adicional e similar, que é o desempacotamento de parâmetros em funções e métodos através do símbolo de reticências. O operador é conhecido em outras linguagens como operador "splat".

Sintaxe do Desempacotamento de Parâmetros em Funções no PHP

A nova sintaxe para desempacotamento de parâmetros em funções e métodos é usar a reticências antes do nome de um parâmetro do tipo array, passado para uma função ou método. Com isso, cada elemento do array é passado para a função como se fosse um parâmetro. Algo similar ao operador list, que pega um array e desempacota em variáveis específicas. Veja um exemplo de desempacotamento de parâmetros:

// Funcao que recebe 4 parametros
function teste($a, $b, $c, $d) {
    return $a + $b + $c + $d;
}

// Utilizacao convencional da funcao, passando cada parametro com uma variavel
$a = 1;
$b = 2;
$c = 3;
$d = 4;
teste($a, $b, $c, $d);

// Utilizacao da funcao usando desempacotamento de parametros
$parametros = array(1, 2, 3, 4);
teste(...$parametros);

// Outro exemplo, mas passando alguns parametros de forma convencion
// e outros via desempacotamento
$a = 1;
$parametros = array(2, 3, 4);
teste($a, ...$parametros);

// Outro exemplo
$a = 1;
$parametros = array(2, 3);
$d = 4;
teste($a, ...$parametros, $d);

Pelos exemplos, dá pra notar que qualquer parâmetro pode ser passado a partir de um array. Caso existam mais elementos do que o necessário no array, eles são ignorados, assim como ocorre se forem passados mais parâmetros para uma função do que o necessário.

Conclusão

O operador splat é bem vindo à linguagem PHP.

O objetivo desta nova sintaxe é tornar a codificação mais ágil, tendo em vista que array é uma estrutura de dados muito comum de ser usada em PHP como container de dados e não apenas para uma sequência de elementos com características comuns.

A única observação que faço a respeito deste novo recurso é que, dependendo da forma como é usado, pode tornar o código menos legível. Veja o último exemplo mostrado anteriormente: nele não é tão fácil identificar que $d é o quarto parâmetro passado para função e não o terceiro. Portanto, quem está depurando um código que utiliza esta sintaxe vai precisar ter atenção à forma como o array $parametros foi criado, para saber quantos elementos tem lá. Portanto, utilize com moderação.

0 comentários