少しハマった!一緒に書き換わるクラス変数の謎 | tazunのブログ

少しハマった!一緒に書き換わるクラス変数の謎

レンタルサーバで動作させているPHPプログラムが想定通りの動きをしない。

異なる無関係なクラス変数のメンバが書き換えられてしまう。

 

は~ん、どうせいい加減な言語だからメモリ領域の不足で番地がかぶって上書きだな。

確実な再現性もないし、ヒープの管理が甘いんだろう。

こういう問題は稼働中に厄介なんだよなぁ。

多すぎるクラス変数とか、includeで肥大化したプログラムサイズとか、きちんと制限事項として書いてないもんなぁ。

 

ローカルPCに同じ環境を作ってトレースすると同じく再現する!?

不確実な再現性の原因は変数の値によるもので、別問題だった。

 

定石通り、前からと後ろからで問題部分を追いこむとココ!


この一行で両方のメンバが書き換わってしまう。

 

初期化の時に定義されていないメンバで試しても同様の事が起こる。

だいたい、こんないい加減なことが許される言語だから、、

 

 

一杯やって、仮眠して、気が向いたところでもう一度考える。

初期化??

もし、これが値渡しでないんだとマズイだろ。

PHPはすべて値をコピーして渡す安全仕様になってたはずだと。

「&」とか、もうないよな。

 

つまり、こうすると正しく動く。

代入のくせにポインタを渡していたってことね。

納得。