2009-07-30 15 views
4

私は次のように基本クラスを宣言する場合:その後、PHPサブクラスにプロパティ(継承とインスタンスの両方)を継承させる方法はありますか?

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" 

を私の第二を持ってする方法はあります最初から継承するクラスもメソッドだけでなくプロパティを継承しますか?

私はPHPの遅い静的バインディングとこれを可能にする継承について何かがあるかどうか疑問に思っています。私はすでにこれを回避する方法をハッキングしています...しかし、宣言されていない静的なプロパティが値のために親に戻ってしまうのは意味をなさないようです。

+0

は、私は、次のPHPのバグレポートを作成しました: http://bugs.php.net/49105 が、私はそれをチェックアウト行くと彼らのサポートを貸すために人々を励まします。これはかなり限定的な制限です。現在の行動も全く無意味です。 –

+0

人々は直感的ではないデフォルトの行動に自ら辞任したようです。ここでの問題は、PHPのデフォルトの動作が正しくないか、またはプロパティを動的に宣言する必要があることです。 –

+0

私はあなたのクエストであなたを完全にサポートしています。この動作は非常に面倒です!残念ながら、ここに滞在するようです。 – djfm

答えて

-2

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

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

+0

リンクが動作していない –

+0

悲しいことに、これは私が少し前に取り除いたblogspotの私のブログにありました。謝罪します。 –

+0

回避策はどこにありますか?なぜここに掲示しないのですか? – txwikinger

1

プロパティが継承され、staticプロパティは、時折、PHPで「奇妙な」ものにつながります。

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

+1

私はすでに私の例ではレイトスタティックバインディングを使用しています...私はそれが何であるか分かっています。 –

関連する問題