Yanıtlar:
PHP 7.1 veya daha yenisi (2 Aralık 2016'da çıktı)
null
Bu 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 = null
yapmak 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 :
NULL
Parametrenin 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 ?T
belirtilen 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);
NullFoo
onlar (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.