unoh.github.com

stdClassのオブジェクト

2006-04-27 09:37:54 +0000

こんにちは、modです。
自分は主に映画生活のPHPプログラムをいじっていますが、この間見たことない現象に出会いました。
あるクラスのオブジェクトをnewしてるつもりが、うまく動かず、変数をvar_dumpしてみると

object(stdClass)

と表示されてしまう。つまり変数の値がstdClassというクラスのオブジェクトなんですが、こんなものを生成した記憶はありません。しかも何やら1つだけフィールドを備えていたりします。

コンストラクタでエラーが出たらこうなるのか?と暫く悩んでましたが、コードを眺めているうちに原因に気づきました。僕はオブジェクトでない値の“フィールドにアクセス”していたのです。つまり、

$foo = "";
$foo->bar = "baz";

このようなことをしていたと。こうすると、$fooは自動的に、値が"baz"のフィールド$barを持ったstdClassクラスのオブジェクトとなるらしいです。
考えてみればPHPでは、未定義の変数 例えば$hoge に対して

$hoge[0]="fuga";

とすると勝手に$hogeが配列として扱われるわけですから、上に書いたような挙動も納得できます。
身に覚えのないオブジェクトができて、「違う、オレはこんなの作ってない!」と戸惑われてる方はどうぞご注意ください^^;