unoh.github.com
stdClassのオブジェクト
Thu Apr 27 02:37:54 -0700 2006
こんにちは、modです。
自分は主に映画生活のPHPプログラムをいじっていますが、この間見たことない現象に出会いました。
あるクラスのオブジェクトをnewしてるつもりが、うまく動かず、変数をvar_dumpしてみると
object(
stdClass
)
と表示されてしまう。つまり変数の値がstdClassというクラスのオブジェクトなんですが、こんなものを生成した記憶はありません。しかも何やら1つだけフィールドを備えていたりします。
コンストラクタでエラーが出たらこうなるのか?と暫く悩んでましたが、コードを眺めているうちに原因に気づきました。僕はオブジェクトでない値の“フィールドにアクセス”していたのです。つまり、
$foo = "";
$foo->bar = "baz";
このようなことをしていたと。こうすると、$fooは自動的に、値が"baz"のフィールド$barを持ったstdClassクラスのオブジェクトとなるらしいです。
考えてみればPHPでは、未定義の変数 例えば$hoge に対して
$hoge[0]="fuga";
とすると勝手に$hogeが配列として扱われるわけですから、上に書いたような挙動も納得できます。
身に覚えのないオブジェクトができて、「違う、オレはこんなの作ってない!」と戸惑われてる方はどうぞご注意ください^^;