PHP alt sınıfları özellikleri (statik ve örnek) devralmak için bir yolu var mı?

2 Cevap php

Aşağıdaki gibi bir temel sınıf bildirirseniz:

abstract class Parent {

  protected static $message = "UNTOUCHED";

     public static function yeah() {
         static::$message = "YEAH";
     }
     public static function nope() {
         static::$message = "NOPE";
     }

     public static function lateStaticDebug() {
         return(static::$message);
     }

}

ve sonra bunu genişletmek:

class Child extends Parent {
}

ve daha sonra bunu:

Parent::yeah();
Parent::lateStaticDebug();  // "YEAH"

Child::nope();
Child::lateStaticDebug();  // "NOPE"

Parent::yeah();
Child::lateStaticDebug()   // "YEAH"

Ayrıca sadece yöntemleri özelliklerini miras değil ilk devralan benim ikinci sınıf için bir yolu var mı?

Bunun için izin verecek PHP'nin geç statik ayrıca bağlama ve miras ile ilgili bir şey var, ben sadece merak ediyorum. Ben zaten bu yoluma etrafında hack değilim ... Ama bu sadece bir bildirilmemiş statik özelliği için bir değer geri üst düşeceği mantıklı görünmüyor!?

2 Cevap

Cevabı "Geçici bir çözüm ile" dir.

Statik bir kurucu oluşturmak zorunda ve bu özellik kopyalamak çağırdı var.

Veraset ve static özellikler bazen PHP "tuhaf" şeyler neden yok.

Sen Late Static Bindings PHP'nin kılavuzunu bakmak gerekir: bu miras ve PHP <= 5.2 static özelliklerini kullanarak ne olacağını açıklıyor; ve kullanabileceğiniz PHP> = 5.3 için bir çözümleri verir static:: yerine self::, statik bağlama yürütme (ve derleme) zaman yapılır, böylece bir anahtar.