SORU
3 ŞUBAT 2009, Salı


Nasıl genişletilmiş PHP bir sınıf statik bir çağrı code alabilir miyim?

İki sınıf var: Action MyAction. İkinci olarak ilan etti

class MyAction extends Action {/* some methods here */}

Tek ihtiyacım yöntemi Action sınıf (sadece, çünkü orada olacak bir sürü miras sınıfları, ve istemiyorum uygulamak için bu yöntemi hepsine), hangi olacak dönüş code gelen bir statik arayın. Bahsettiğim şey burada:

Class Action {
 function n(){/* something */}
}

Ve benim numaram:

MyAction::n(); // it should return "MyAction"

Ama üst sınıf her beyanı sadece üst sınıf erişebilir değerine sahip __CLASS__ değişken, “Eylem”.

Herhangi bir şekilde bunu yapmak için var mı?

CEVAP
3 ŞUBAT 2009, Salı


__CLASS__ her zaman statik bir yöntem ile pek yardımcı değil bu yüzden içinde kullanılan sınıf adını döndürür. Eğer statik bir yöntem olmasa da sadece get_class($) kullanabilirsiniz. örneğin

class Action {
    public function n(){
        echo get_class($this);
    }

}

class MyAction extends Action {

}

$foo=new MyAction;

$foo->n(); //displays 'MyAction'

Geç statik bağlama, PHP 5.3 mevcut

PHP 5.3 yayımlanan şimdi, zamanında statik bir yöntem çağrısı için hedef sınıf çözelim late static bindings kullanmak yerine tanımlandığında.

Süre bulunmuyor tanıtmak yeni bir büyü sürekli sen code olduğunuzu denilen, değil mi sağlayan yeni bir fonksiyon get_called_class() hangi söyleyebilirsiniz Adı Sınıf statik bir yöntem idi. İşte size bir örnek:

Class Action {
    public static function n() {
        return get_called_class();
    }
}


class MyAction extends Action {

}


echo MyAction::n(); //displays MyAction

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CaptainDisillusion

    CaptainDisil

    18 EYLÜL 2007
  • Thom Hall

    Thom Hall

    24 Kasım 2006
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005