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 self
anlamı 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 self
anlamı 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, static
anahtar kelime için yeni bir kullanım sunar : artık tam olarak self
bu ö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 static
bunun yerine ile self
artı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, self
mevcut 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 .