O PHP 7 introduz declarações de tipo de retorno . O que significa que agora posso indicar que o valor de retorno é uma determinada classe, interface, matriz, que pode ser chamada ou um dos tipos escalares recém-sugeridos, como é possível para os parâmetros de função.
function returnHello(): string {
return 'hello';
}
Muitas vezes, acontece que um valor nem sempre está presente e você pode retornar algo de algum tipo ou nulo. Embora você possa tornar os parâmetros anuláveis configurando seu padrão como null ( DateTime $time = null
), não parece haver uma maneira de fazer isso para os tipos de retorno. É esse mesmo o caso, ou não estou descobrindo como fazê-lo? Estes não funcionam:
function returnHello(): string? {
return 'hello';
}
function returnHello(): string|null {
return 'hello';
}
php
nullable
return-type
type-hinting
php-7
Jeroen De Dauw
fonte
fonte
function returnString(?string $stringNull) : ?string { return $stringNull;}
Trowable
de interface (especificamente, estendendo-se oTypeError
)Respostas:
O PHP 7.1 agora suporta tipos de retorno anuláveis . O primeiro RFC ao qual vinculei foi o que eles procuraram:
resposta antiga:
Como meu comentário foi na verdade uma resposta para a pergunta:
O PHP 7 ainda não suporta tipos de retorno anuláveis, mas há uma RFC para resolver exatamente isso, que visa pousar no PHP 7.1. Se for aprovada, a sintaxe afetará todas as dicas de tipo (tipos de retorno e dicas de tipo):
Há também uma RFC concorrente para adicionar tipos de união, que poderiam fazer a mesma coisa, mas pareceriam diferentes:
Por enquanto, porém, você terá que escrever:
Ou simplesmente retorne uma string vazia para ser consistente com o tipo de retorno e verifique o valor falso:
fonte
PHP 7 won't support nullable return-types just yet, but there's an RFC out to address just that
- sim, RFC, "ainda". Não me entenda mal - eu sou muito usuário de PHP desde tempos muito ruins até agora, sem brechas, mas quando vi todos esses RFCs que eles rejeitaram por 7, minha impressão foi apenas "WTF ?!". Os usuários veem a bagunça e estão dispostos a limpá-la da maneira compatível com versões anteriores , e eles simplesmente ficam "não". Métodos limpos nomeando bagunça? Corrigidonull
não ser cidadão muito especial? Não, não é necessário. Adicionar opção para diferenciar maiúsculas de minúsculas? Nah .. E então, surpreenda que as pessoas mudem.var
). O que é uma pena é que em vez disso, aceitou um demasiados agradável de se ter de (operador de nave espacial, por exemplo)Tipos anuláveis estão disponíveis no PHP 7.1.
Este é um exemplo de sintaxe:
Agora o PHP 7.1 é GA e você pode atualizar do PHP 7.0 (existem apenas algumas alterações incompatíveis com versões anteriores que você precisa verificar)
fonte
Funciona com qualquer tipo.
Exemplo:
fonte