self
yazılı olduğu sınıfa puan.
Yani, getInstance yöntemi bir sınıf adına ise MyClass
, aşağıdaki satırı:
self::$_instance = new self();
Olarak aynısını yapacağız:
self::$_instance = new MyClass();
Edit : a couple more informations, after the comments.
Eğer birbirine uzanan iki sınıfları varsa, iki durum vardır:
getInstance
çocuk sınıfında tanımlanmış
getInstance
üst sınıfında tanımlanmış
İlk durum, bu gibi bakmak (ben bu örneğin, olmayan tüm gerekli kodu kaldırdık - Eğer tekil davranış almak için geri eklemek gerekir) olurdu *:
class MyParentClass {
}
class MyChildClass extends MyParentClass {
public static function getInstance() {
return new self();
}
}
$a = MyChildClass::getInstance();
var_dump($a);
Burada, alırsınız:
object(MyChildClass)#1 (0) { }
Hangi self
araçları MyChildClass
anlamına gelir - bu yazılı olduğu sınıf, yani.
For the second situation, the code would look like this :
class MyParentClass {
public static function getInstance() {
return new self();
}
}
class MyChildClass extends MyParentClass {
}
$a = MyChildClass::getInstance();
var_dump($a);
Ve çıktı bu tür almak istiyorum:
object(MyParentClass)#1 (0) { }
self
araçları MyParentClass
anlamına gelir - yani burada da, the class in which it is written.
With PHP < 5.3, that "the class in which it is written" is important -- and can sometimes cause problems.
PHP 5.3 static
anahtar kelime için yeni bir kullanım sunuyor yüzden: biz self
, bu örneklerde kullanılan tam olarak nerede şimdi kullanılabilir:
class MyParentClass {
public static function getInstance() {
return new static();
}
}
class MyChildClass extends MyParentClass {
}
$a = MyChildClass::getInstance();
var_dump($a);
Ancak, static
yerine ile self
, şimdi alırsınız:
object(MyChildClass)#1 (0) { }
Bunun anlamı the class that is used yazılı olduğu bir (biz MyChildClass::getInstance()
kullanılan), ve değil puan static
tür.
Tabii ki, bir davranış self
mevcut uygulamaları kırmak değil, bir değişiklik olmamıştır - PHP 5.3 sadece static
anahtar geri dönüşüm, yeni bir davranış ekledi.
And, speaking about PHP 5.3, you might want to take a look at the Late Static Bindings page of the PHP manual.