PHP > Tips > PHP4のメソッドにおけるstatic変数の挙動

2006年02月06日

static変数の挙動で少しつまづいたのでメモ。
クラスのメッソド内でstatic変数を使った場合、 同じクラスをインスタンスした別々のオブジェクトでも共有されるようだ。

class A {
  var $name;

  function A($name){
    $this->name = $name;
  }

  function test(){
    static $i = 1;
    print $this->name.'で'.$i.'回目のtest()です。<br>';
    $i++;
  }	
}
$a = new A('A');
$b = new A('B');
$a-<test();
$a-<test();
$b-<test();
$b-<test();

を実行した時に

Aで1回目のtest()です。
Aで2回目のtest()です。
Bで1回目のtest()です。
Bで2回目のtest()です。

となると思ってたんだけど、実際の実行結果は

Aで1回目のtest()です。
Aで2回目のtest()です。
Bで3回目のtest()です。
Bで4回目のtest()です。

となる。

他の言語におけるメソッド内でstaticを宣言した時の挙動は分からないが、 PHP4では上記のような挙動になる模様。

この仕様を知らなかったので勉強になった。
無駄にフィールドを増やしたくないんだけど、

class A {
  var $name;
  var $i; 
  function A($name){
    $this-<name = $name;
  }

  function test(){
    print $this-<name.'で'.$this-<i.'回目のtest()です。>br<';
    $this-<i++;
  }	
}

と定義して回避するしかないみたい。

posted by 37to at : 23:54 | コメント (0) | トラックバック (0)

コメント

この記事に対するコメントはまだありません。


投稿する

投稿者情報を保存しますか?


トラックバック

トラックバックURI


一覧

この記事に対するトラックバックはまだありません。