PHP 7.1 ou mais recente (lançado em 2 de dezembro de 2016)
Você pode declarar explicitamente uma variável como null
esta sintaxe
function foo(?Type $t) {
}
isso resultará em
$this->foo(new Type()); // ok
$this->foo(null); // ok
$this->foo(); // error
Portanto, se você deseja um argumento opcional, pode seguir a convenção, Type $t = null
enquanto que, se precisar fazer um argumento, aceita ambos null
e seu tipo, pode seguir o exemplo acima.
Você pode ler mais aqui .
PHP 7.0 ou mais antigo
Você precisa adicionar um valor padrão como
function foo(Type $t = null) {
}
Dessa forma, você pode transmitir um valor nulo.
Isso está documentado na seção do manual sobre declarações de tipo :
A declaração pode ser feita para aceitar NULL
valores se o valor padrão do parâmetro é definido como NULL
.
function foo(Type $t)
é MUITO bom; veja nulos Referências: A Billion Dollar MistakeA partir do PHP 7.1, tipos anuláveis estão disponíveis, pois os tipos e parâmetros de retorno de função. O tipo
?T
pode ter valores do tipo especificadoT
, ounull
.Portanto, sua função pode ficar assim:
Assim que você pode trabalhar com o PHP 7.1, essa notação deve ser preferida
function foo(Type $t = null)
, porque ainda força o chamador a especificar explicitamente um argumento para o parâmetro$t
.fonte
Experimentar:
Confira os argumentos da função PHP .
fonte
Como outras respostas já mencionadas, isso só é possível se você especificar
null
como o valor padrão.Mas a solução mais limpa e orientada a objetos com segurança de tipo seria um NullObject :
Uso:
fonte
NullFoo
a substituir métodos abstratos, mesmo que eles não tenham significado (por definição denull
).if (something is null)
verificações, pois o NullObject destina-se a cobrir todo o comportamento de um valor inexistente e qualquer colaborador externo não deve estar interessado em saber se um O objeto não existe (nulo) ou não.