Yeni öz ne yapar(); PHP demek?
Böyle bir kod gördüm:
public static function getInstance()
{
if ( ! isset(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
new className()
aynı şey mi ?
EDİT
Eğer sınıf inheritant ise,hangi sınıf için?
CEVAP
self
bunu yazılı sınıfı işaret eder.
Eğer getınstance yöntemi bir sınıf adı ise, MyClass
aşağıdaki satırı :
self::$_instance = new self();
Aynı şeyi yapacaktır
self::$_instance = new MyClass();
Edit : bir kaç bilgiler, yorumlar sonra.
Eğer birbirine uzanan iki sınıf varsa, iki durum vardır :
getInstance
alt sınıf olarak tanımlanırgetInstance
üst sınıf olarak tanımlanır
İlk durum (non-gerekli, bu örnek için kod -- geri singleton davranış eklemek gerek çıkardım) bu* gibi görünecektir :
class MyParentClass {
}
class MyChildClass extends MyParentClass {
public static function getInstance() {
return new self();
}
}
$a = MyChildClass::getInstance();
var_dump($a);
Burada,: var
object(MyChildClass)#1 (0) { }
self
araç MyChildClass
-- yani bunu yazılı sınıf anlamına gelir.
İkinci durum için kod şu şekilde görünecektir :
class MyParentClass {
public static function getInstance() {
return new self();
}
}
class MyChildClass extends MyParentClass {
}
$a = MyChildClass::getInstance();
var_dump($a);
Ve çıkış bu tür olsun istiyorum :
object(MyParentClass)#1 (0) { }
self
demek yani MyParentClass
burada da demek kisınıf yazılır.
"Bunu yazılı sınıf" önemli-ve bazen sorunlara neden olabilir. PHP < 5.3,
Bu yüzden PHP 5.3 static
anahtar kelime için yeni bir kullanım sunar : şimdi bu örnekler: self
gittiğimiz tam olarak kullanılabilir
class MyParentClass {
public static function getInstance() {
return new static();
}
}
class MyChildClass extends MyParentClass {
}
$a = MyChildClass::getInstance();
var_dump($a);
Ama, self
yerine static
ile şimdi alırsınız :
object(MyChildClass)#1 (0) { }
static
bir çeşit işaret anlamına gelirsınıf kullanılır(MyChildClass::getInstance()
kullandık) bunu yazılı değil, ve.
Tabii ki, self
mevcut uygulamaları PHP değil kırmak için değiştirilmedi 5.3 davranışını sadece yeni bir davranış, static
geri dönüşüm sözcüğünü ekledi.
Ve, konuşma hakkında 5.3, PHP kılavuzu Late Static Bindings sayfaya bir bak istersen PHP.
PorterDuff şeyi yapar.Mod android graf...
&Lt ne yapar;![[] CDATA]&; gt XML deme...
Nasıl "nesne yapar.yeni" iş?...
Nasıl yeni otomatik referans sayma mek...
Cultureınfo şeyi yapar.Invariantcultur...