self yazıldığı sınıfı gösterir.
Öyleyse, getInstance yönteminiz bir sınıf adındaysa MyClass, aşağıdaki satır:
self::$_instance = new self();
Aynı şeyi yapacak:
self::$_instance = new MyClass();
Düzenleme: yorumlardan sonra birkaç bilgi daha.
Birbirini genişleten iki sınıfınız varsa, iki durumunuz vardır:
getInstance alt sınıfta tanımlanmıştır
getInstance ebeveyn sınıfta tanımlanmıştır
İlk durum şöyle görünecektir (Bu örnek için gerekli olmayan tüm kodları kaldırdım - tekli davranışı elde etmek için tekrar eklemeniz gerekecek) *:
class MyParentClass {
}
class MyChildClass extends MyParentClass {
public static function getInstance() {
return new self();
}
}
$a = MyChildClass::getInstance();
var_dump($a);
Burada şunları alacaksınız:
object(MyChildClass)#1 (0) { }
Bunun selfanlamı MyChildClass- yani yazıldığı sınıf.
İkinci durum için kod şöyle görünecektir:
class MyParentClass {
public static function getInstance() {
return new self();
}
}
class MyChildClass extends MyParentClass {
}
$a = MyChildClass::getInstance();
var_dump($a);
Ve bu tür çıktılar elde edersiniz:
object(MyParentClass)#1 (0) { }
Bunun selfanlamı MyParentClass- yani burada da yazıldığı sınıf .
PHP <5.3 ile, "yazıldığı sınıf" önemlidir ve bazen sorunlara neden olabilir.
Bu nedenle PHP 5.3, staticanahtar kelime için yeni bir kullanım sunar : artık tam olarak selfbu örneklerde kullandığımız yerde kullanılabilir :
class MyParentClass {
public static function getInstance() {
return new static();
}
}
class MyChildClass extends MyParentClass {
}
$a = MyChildClass::getInstance();
var_dump($a);
Ancak staticbunun yerine ile selfartık şunları alacaksınız:
object(MyChildClass)#1 (0) { }
Bu , kullanılan sınıfastatic işaret eden bir tür anlamına gelir (MyChildClass::getInstance() , yazıldığı ) .
Elbette, selfmevcut uygulamaları bozmamak için davranışı değiştirilmedi - PHP 5.3 yeni bir davranış ekledi,static anahtar kelimeyi .
PHP 5.3 hakkında konuşurken , PHP kılavuzunun Geç Statik Bağlamalar sayfasına bir göz atmak isteyebilirsiniz .