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:
void
pode terreturn
; masnever
não pode.never
impõe que uma função seja lançada ou encerrada com exit/die, masvoid
nã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 void
e never
vice-versa?
Você deve declarar um tipo de retorno de função void
quando 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!!!!