Qual é a diferença entre os tipos de retorno never e void no PHP 8.1?

No PHP8.1 foi introduzido um novo tipo de retorno, o tipo never , e isso gerou alguma duvida, qual é a diferença com o tipo void?

Hoje vamo esclarecer essa duvida rapidinho.

Never

O tipo never é usada para indicar que a função não termina. Sendo assim, as funções que tem o tipo de retorno never nunca possuem uma instruções return nem implícitas nem explícitas.

Esse tipo de retorno deve ser usado quando a função sera encerrada ou nunca vai terminar, quer seja pelo lançamento de uma exceção ou saindo usando as funções exit() ou die() .

function saudar(string $name): never 
{
    echo "Ola, $name";
    exit(); // Se comentar essa linha, teremos um fatal error
}

saudar("Tilson"); // result: "Ola, Tilson"
echo "Outra Linha"; // <--- Isso nunca sera executado

Void

O tipo void é usado para indica que a função não retorna um valor, mas a função ainda pode terminar.

function saudar(string $name): void 
{
    echo "Ola, $name";
}

saudar("Tilson"); // result: "Ola, Tilson"

Ainda é permitido declarar um return, mas, esse return nunca deve retornar algum tipo de valor.

<?php

// GOOD EXAMPLE
function goodExample(): void 
{
    echo "Bom exemplo";
    return; // Vai executar, porque não retorna valor.
}

// BAD EXAMPLE
function badExample(): void 
{
    echo "Mal exemplo";
    return "ola mundo"; //PHP Fatal error:  A void function must not return a value
}

badExample() // PHP Fatal error
goodExample(); // "Bom exemplo"

Diferença

Vamos recaptular:

  • voidpode ter return ; mas never não pode.

  • neverimpõe que uma função seja lançada ou encerrada com exit/die, mas voidnão o faz.

  • Ambos não permitem retornar um valor.

  • Ambos não podem ser usados ​​como parâmetro ou tipo de propriedade.

  • Ambos não podem ser usados ​​como tipo de retorno de uma função de seta.

  • Ambos só podem ser usados ​​como um tipo independente (nenhuma união ou interseção é permitida).

Quando escolher voide nevervice-versa?

Você deve declarar um tipo de retorno de função voidquando espera que o PHP execute a próxima instrução após a chamada da função.

E você deve declará-lo never quando não espera que o PHP execute a próxima instrução após a chamada de função.

Considerações finais

Por hoje foi isso, não esqueça de deixar duvidas nos comentarios e de deixar um coração neste post. Vemos-nos na proxima, valeu!!!!

Did you find this article valuable?

Support Tilson Mateus by becoming a sponsor. Any amount is appreciated!