SORU
7 Mart 2010, Pazar


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
7 Mart 2010, Pazar


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ır
  • getInstance ü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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Edge-CGI 3D Tutorials and more!

    Edge-CGI 3D

    11 HAZİRAN 2013
  • TROPFEST

    TROPFEST

    27 Mart 2007
  • UnboxTechnology

    UnboxTechnol

    20 Ocak 2011