2012-01-13 25 views
0
class StaticTester 
    { 
     private static $id=0; 
     function__construct() 
    { 
      self::$id+=1; 
    } 
    public static function checkIdFromStaticMethod() 
    { 
     echo "Current Id from Static method is ".self::$id; 
    } 


} 

    $st1=new StaticTester(); 
StaticTester::checkIdFromStaticMethod();  // this outputs 1. 

出力が1である理由はわかりません。 すべてのStaticは値を変更できないことを意味します。PHPの静的宣言動作を取得できません

答えて

1
function__construct() 
{ 
    self::id+=1; 
} 

function__construct() 
{ 
    self::$id+=1; 
} 

がドル記号を逃したする必要があります:)

おっとを....質問を読み違えます。私はあなたのコードheheでエラーがあったと思った。おそらく単なるコピー/ペーストエラーです。

新しいオブジェクトが作成されるたびに1ずつインクリメントされるので、1になります。すべてのオブジェクトは同じid変数を共有します。これは静的な意味です。

数字はconstantと呼ばれ、キーワードはconstでPHPで宣言されています。

+0

と今タンデュは元の質問を修正したので、今これはさらに遅れているように見えます。私はちょうど答えを削除する必要があります。または多分私自身でさえ._____。 – davogotland

+0

タンデューは心配しないでください。あなたの答えは、実際には単語 "静的"の意味をクリアしました。ありがとうございました 。 – kushalvm

0

staticは、値を変更することはできません。 const、またはfinal(PHPにはありません)が必要です。 staticは、実際にはメソッド呼び出しの間の値を保持します(メンバーであるため、とにかく)。

+0

phpにはメソッドb.t.w.の[final](http://www.php.net/manual/en/language.oop5.final.php)があります。 – Wrikken

+0

'またはfinal(PHPにはない)' - 本当ですか? [いつから](http://www.php.net/manual/en/language.oop5.final.php)? – DaveRandom

+0

@DaveRandom 'final'はメソッドにのみ適用されます.. Wrikkenはあなたがコメントする前にそれを言っていました。 –

0

静的とは、値を変更できないという意味ではなく、値がインスタンスレベルではなくクラスレベルで保持されていることを意味します。他の言語(Javaなど)では、これを「クラス変数」と呼ぶことがあります。

あなたはstaticfinalまたはconstの間で混乱していると思います。

マニュアル参考文献:

0

静的手段:すべての可能なインスタンスに対して、同じ変数が

function__construct() 
    { 
      self::$id+=1; 
    } 

$st1=new StaticTester(); 
を使用します

新しい__constructを呼び出すと、$ id静的変数が使用されます(&)。 $ st2 = new StaticTester()、StaticTester :: checkIdFromStaticMethod()は2を返します。 これはあなたのコードが書かれているとおりのものです。

「一定の」回答に同意します。

関連する問題