Operador de propagação PHP

Resumo : neste tutorial, você aprenderá sobre o operador spread do PHP e como usá-lo de forma eficaz, como mesclar vários arrays em um único.

Introdução ao operador spread PHP

O PHP 7.4 introduziu o operador spread na expressão de array . PHP usa os três pontos (...) para denotar o operador spread.

Quando você prefixa um array com o operador spread, o PHP espalha os elementos do array no lugar:

...array_varLinguagem de código:  PHP  ( php )

Por exemplo:

<?php

$numbers = [4,5];
$scores = [1,2,3, ...$numbers];

print_r($scores);Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)Linguagem de código:  PHP  ( php )

Como funciona.

  • Primeiro, defina o $numbersarray que contém dois inteiros.
  • Em segundo lugar, defina a $scoresmatriz de três inteiros 1, 2 e 3. Além disso, espalhe os elementos da $numbersmatriz na $scoresmatriz. Como resultado, a $scorematriz conterá cinco números 1, 2, 3, 4 e 5.

O operador spread oferece melhor desempenho do que a array_merge()função porque é uma construção de linguagem, enquanto array_merge()é uma chamada de função. Além disso, o PHP otimiza o desempenho de arrays constantes em tempo de compilação.

Ao contrário da descompactação de argumentos, você pode usar o operador spread em qualquer lugar. Por exemplo, você pode usar o operador spread no início do array:

<?php

$numbers = [1,2];
$scores = [...$numbers, 3, 4];

print_r($scores);Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)Linguagem de código:  PHP  ( php )

Ou você pode usar o operador spread no meio de um array como este:

<?php

$numbers = [2,3];
$scores = [1, ...$numbers, 4];

print_r($scores);Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)Linguagem de código:  PHP  ( php )

Usando o operador spread PHP várias vezes

PHP permite que você use o operador spread várias vezes. Por exemplo:

<?php

$even = [2, 4, 6];
$odd = [1, 2, 3];
$all = [...$odd, ...$even];

print_r($all);Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 2
    [4] => 4
    [5] => 6
)Linguagem de código:  PHP  ( php )

Como funciona.

  • Primeiro, defina duas matrizes $evenque $oddcontenham os números pares e ímpares.
  • Segundo, use o operador spread para espalhar elementos desses arrays em um novo array $all. A $allmatriz conterá os elementos de ambas as matrizes $evene $odd.

Usando o operador spread PHP com um valor de retorno de uma chamada de função

O exemplo a seguir usa o operador spread com o valor de retorno de uma função:

<?php

function get_random_numbers()
{
    for ($i = 0; $i < 5; $i++) {
        $random_numbers[] = rand(1, 100);
    }
    return $random_numbers;
}

$random_numbers = [...get_random_numbers()];

print_r($random_numbers);Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => 47
    [1] => 78
    [2] => 83
    [3] => 13
    [4] => 32
)Linguagem de código:  PHP  ( php )

Como funciona.

  • Primeiro, defina uma função get_random_numbers()que retorne um array de cinco inteiros aleatórios entre 1 e 100.
  • Em seguida, use o operador spread para distribuir os elementos do array retornado diretamente da chamada de função.

Observe que você provavelmente verá uma saída diferente por causa da rand()função.

Usando o operador spread PHP com um gerador

No exemplo a seguir, primeiro definimos um gerador que retorna números pares entre 2 e 10. Em seguida, usamos o operador spread para distribuir o valor retornado do gerador em um array:

<?php

function even_number()
{
    for($i =2; $i < 10; $i+=2){
        yield $i;
    }
}

$even = [...even_number()];

print_r($even);Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 8
)Linguagem de código:  PHP  ( php )

Usando o operador spread PHP com um objeto Traversable

O PHP permite aplicar o operador spread não apenas a um array, mas também a qualquer objeto que implemente a Traversableinterface. Por exemplo:

<?php

class RGB implements IteratorAggregate
{
    private $colors = ['red','green','blue'];

    public function getIterator()
    {
        return new ArrayIterator($this->colors);
    }
}

$rgb = new RGB();
$colors = [...$rgb];

print_r($colors);Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => red
    [1] => green
    [2] => blue
)Linguagem de código:  PHP  ( php )

Operador de propagação e argumentos nomeados

O PHP 8 permite chamar uma função usando argumentos nomeados. Por exemplo:

<?php


function format_name(string $first, string $middle, string $last): string
{
    return $middle ?
        "$first $middle $last" :
        "$first $last";
}

echo format_name(
    first: 'John',
    middle: 'V.',
    last: 'Doe'
); // John V. Doe

Linguagem de código:  HTML, XML  ( xml )

Além disso, você pode passar os argumentos para a função format_name usando o operador spread:

<?php


function format_name(string $first, string $middle, string $last): string
{
    return $middle ?
        "$first $middle $last" :
        "$first $last";
}


$names = [
    'first' => 'John',
    'middle' => 'V.',
    'last' => 'Doe'
];

echo format_name(...$names); // John V. Doe
Linguagem de código:  HTML, XML  ( xml )

Neste caso, as chaves dos elementos do array correspondem aos nomes dos parâmetros da format_name()função.

Resumo

  • PHP usa os três pontos ( ...) para denotar o operador spread.
  • O operador spread espalha os elementos de um array ( ...array_var).
  • Use o operador spread com uma matriz ou objeto que implemente a Traversableinterface.
  • Use o spread array PHP para mesclar dois ou mais arrays em um.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *