4

次のように基本クラスを宣言するとします。

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);
     }

}

そしてそれを拡張します:

class Child extends Parent {
}

そして、これを行います:

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

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

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

メソッドだけでなく、最初のクラスから継承する 2 番目のクラスにもプロパティを継承させる方法はありますか?

PHP の後期静的バインディングと、これを可能にする継承について何かがあるかどうか疑問に思っています。私はすでにこれを回避しています...しかし、宣言されていない静的プロパティが値のためにその親にフォールバックすることは意味がないようです!?

4

3 に答える 3

0

継承とstaticプロパティは、PHP で「奇妙な」ことを引き起こすことがあります。

PHP のマニュアルのLate Static Bindingsを参照してください。PHP static<= 5.2 でプロパティを継承して使用するとどうなるかが説明されています。static::の代わりにキーワードを使用できる PHP >= 5.3 のソリューションを提供するためself::、実行時 (コンパイル時ではなく) に静的バインディングが行われます。

于 2009-07-30T04:53:04.153 に答える
-3

答えは「回避策あり」です。

静的コンストラクターを作成し、それを呼び出してプロパティをコピーする必要があります。

于 2009-08-07T16:31:50.003 に答える