Yanıtlar:
PHP 7.1 veya daha yenisi (2 Aralık 2016'da çıktı)
nullBu sözdizimiyle bir değişkeni açıkça bildirebilirsiniz
function foo(?Type $t) {
}
bu sonuçlanacak
$this->foo(new Type()); // ok
$this->foo(null); // ok
$this->foo(); // error
İsteğe bağlı argüman istiyorsanız Yani, kongre takip edebilirsiniz Type $t = nullyapmak gerekirse bir argüman hem kabul oysanull türünü de türünü yukarıdaki örneği takip edebilirsiniz.
Daha fazlasını buradan okuyabilirsiniz .
PHP 7.0 veya üstü
Gibi varsayılan bir değer eklemelisiniz
function foo(Type $t = null) {
}
Bu şekilde, boş bir değer iletebilirsiniz.
Bu, kılavuzdaki Tip Beyanları ile ilgili bölümde belgelenmiştir :
NULLParametrenin varsayılan değeri olarak ayarlanmışsa, değerleri kabul etmek için bildirim yapılabilirNULL.
function foo(Type $t)çok iyi bir şey olduğunu; bkz. Sıfır Referanslar: Milyar Dolarlık Hata
PHP 7.1'den başlayarak, hem işlev dönüş tipleri hem de parametreler olarak null olabilecek türler mevcuttur. Tipi ?Tbelirtilen Türü değerlere sahip olabilir T, ya da null.
Yani, fonksiyonunuz şöyle görünebilir:
function foo(?Type $t)
{
}
PHP 7.1 ile çalışabildiğiniz anda, bu gösterimi tercih etmelisiniz function foo(Type $t = null), çünkü hala arayanı parametre için bir argüman belirlemeye zorlar $t.
Daha önce de belirtildiği gibi, bu sadece belirttiğinizde mümkündür null varsayılan değer olarak .
Ancak en temiz tip-güvenli nesne yönelimli çözüm bir NullObject olacaktır :
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)';
}
}
Kullanımı:
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);
NullFooonlar (tanımından anlamı yoktur rağmen soyut yöntemler geçersiz kılmak için null).
if (something is null)kontrollerden kaçınması amaçlanmıştır , çünkü NullObject mevcut olmayan bir değerin tüm davranışlarını kapsamak içindir ve herhangi bir dış işbirlikçinin bir nesne mevcut değil (boş) veya yok.