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 at 37to : commetns(0) : trackbacks(0)
本エントリへのトラックバックURL
http://blog.37to.net/mt/mt-tb.cgi/12