PHP 7.1 o más reciente (lanzado el 2 de diciembre de 2016)
Puede declarar explícitamente una variable null
con esta sintaxis
function foo(?Type $t) {
}
esto resultará en
$this->foo(new Type()); // ok
$this->foo(null); // ok
$this->foo(); // error
Entonces, si desea un argumento opcional, puede seguir la convención, Type $t = null
mientras que si necesita hacer que un argumento acepte ambos null
y su tipo, puede seguir el ejemplo anterior.
Puedes leer más aquí .
PHP 7.0 o anterior
Tienes que agregar un valor predeterminado como
function foo(Type $t = null) {
}
De esa manera, puede pasarle un valor nulo.
Esto está documentado en la sección del manual sobre declaraciones de tipo :
La declaración se puede hacer para aceptar NULL
valores si el valor predeterminado del parámetro se establece en NULL
.
function foo(Type $t)
es algo MUY bueno; ver Referencias nulas: El error del billón de dólaresA partir de PHP 7.1, los tipos anulables están disponibles, tanto los tipos de retorno de función como los parámetros. El tipo
?T
puede tener valores del tipo especificadoT
, onull
.Entonces, su función podría verse así:
Tan pronto como pueda trabajar con PHP 7.1, debería preferirse esta notación
function foo(Type $t = null)
, ya que aún obliga al llamante a especificar explícitamente un argumento para el parámetro$t
.fuente
Tratar:
Echa un vistazo a los argumentos de la función PHP .
fuente
Como ya se mencionó en otras respuestas, esto solo es posible si especifica
null
como valor predeterminado.Pero la solución orientada a objetos de tipo seguro más limpia sería un NullObject :
Uso:
fuente
NullFoo
anular los métodos abstractos, a pesar de que no tienen significado (por definición denull
).if (something is null)
verificaciones, ya que el NullObject está destinado a cubrir todo el comportamiento de un valor no existente y cualquier colaborador externo no debería estar interesado en saber si un objeto no existe (nulo) o no.