PHP 7.1 lub nowszy (wydany 2 grudnia 2016 r.)
Możesz jawnie zadeklarować zmienną, która ma mieć null
taką składnię
function foo(?Type $t) {
}
spowoduje to
$this->foo(new Type());
$this->foo(null);
$this->foo();
Tak więc, jeśli chcesz opcjonalnego argumentu, możesz postępować zgodnie z konwencją, Type $t = null
podczas gdy jeśli chcesz, aby argument akceptował oba null
i jego typ, możesz postępować zgodnie z powyższym przykładem.
Możesz przeczytać więcej tutaj .
PHP 7.0 lub starszy
Musisz dodać wartość domyślną, taką jak
function foo(Type $t = null) {
}
W ten sposób możesz przekazać mu wartość null.
Jest to udokumentowane w sekcji podręcznika dotyczącej deklaracji typu :
Deklaracja może akceptować NULL
wartości, jeśli domyślna wartość parametru jest ustawiona na NULL
.
function foo(Type $t)
jest BARDZO dobrą rzeczą; patrz OdniesieniaPocząwszy od PHP 7.1 dostępne są typy dopuszczające wartość null , zarówno jako typy zwracane przez funkcje, jak i parametry. Typ
?T
może mieć wartości określonego TypeT
lubnull
.Twoja funkcja mogłaby więc wyglądać tak:
function foo(?Type $t) { }
Jak tylko będziesz mógł pracować z PHP 7.1, ta notacja powinna być preferowana
function foo(Type $t = null)
, ponieważ nadal zmusza wywołującego do jawnego określenia argumentu dla parametru$t
.źródło
Próbować:
function foo(Type $t = null) { }
Sprawdź argumenty funkcji PHP .
źródło
Jak już wspomniały inne odpowiedzi, jest to możliwe tylko wtedy, gdy określisz
null
jako wartość domyślną.Ale najczystszym zorientowanym obiektowo rozwiązaniem bezpiecznym dla typów byłby 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)'; } }
Stosowanie:
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);
źródło
NullFoo
do zastąpienia metod abstrakcyjnych, nawet jeśli nie mają one znaczenia (z definicjinull
).if (something is null)
kontroli, ponieważ NullObject ma obejmować wszystkie zachowania nieistniejącej wartości i żaden zewnętrzny współpracownik nie powinien być zainteresowany tym, czy obiekt nie istnieje (null) lub nie.