2011-02-23 16 views
0

次のコードは 'xはクラスAに設定されている'と出力しますが、クラスBを変更せずに 'xはクラスBに設定された出力'にするにはどうすればよいですか?このシナリオで遅延バインディングはどのように機能しますか?

<?php 

class A 
{ 
    public static $x = 'x as set in class A'; 

    public static function getX() 
    { 
     return self::$x; 
    } 
} 


class B extends A 
{ 
    public static $x = 'x as set in class B'; 
} 


echo B::getX(); 
+0

PHP <では使用できません。 –

答えて

2

self常には、それが定義されたクラスを意味します。あなたが探しているのは、 "Late Static Binding"です(既に提案していますが、使用しないでください)。コードブロック内のstaticキーワードは、「実際の」クラスを参照します。つまり、呼び出されたクラス(XY::method())または呼び出されたオブジェクトのクラス($x->method())のいずれかを意味します。

return static::$x; 

プロパティ宣言のstaticキーワードは、LSBとは何も関係ありません。これは、クラスプロパティの一般的な宣言に過ぎません。

注意、それがLSBこれは私が尋ねたものではありません、念のため5.3

+0

ああ、ありがとうございました。素晴らしい返信 –

関連する問題