Respuestas:
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 enNULL
.
function foo(Type $t)
es algo MUY bueno; ver Referencias nulas: El error del billón de dólares
A 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 especificado T
, o null
.
Entonces, su función podría verse así:
function foo(?Type $t)
{
}
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
.
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 :
interface FooInterface
{
function bar();
}
class Foo implements FooInterface
{
public function bar()
{
return 'i am an object';
}
}
class NullFoo implements FooInterface
{
public function bar()
{
return 'i am null (but you still can use my interface)';
}
}
Uso:
function bar_my_foo(FooInterface $foo)
{
if ($foo instanceof NullFoo) {
// special handling of null values may go here
}
echo $foo->bar();
}
bar_my_foo(new NullFoo);
NullFoo
anular los métodos abstractos, a pesar de que no tienen significado (por definición de null
).
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.