domxml周りのめんどくささ



お久しぶりです。
ただ今仕事でphpを始めております。Web系統の処理が非常に楽チンなのでMMORPGもこれで作っちゃおうかしらと気持ちが傾いています(というか最近のブラウザMMORPGはこういうスクリプト言語で作られてんじゃないかしら?)
まあ、サーバー側の負担が半端ではないので、1万人同時接続とか無理でしょうけどね。


さて!急いでphpに携わらなければならなかったので、即席でphp使いになるために

を読みました。簡単である上に、いきなり使えるコードが出ているので嬉しい。
しかしやはりそこには落とし穴が!


phpでは変数には頭に半角の「$」を付ける。うむ、それはBASICでもそうなので違和感は無い。
phpでは定数には頭に半角の「$」を付けない。ほほう、そうやって区別するのね。識別子を見ただけで定数か変数か分かるのはいいね。


さーて参考ソースをもらったので、それを手本にお仕事しますかね。どれどれ?phpではオブジェクトのフィールドを$obj->fldmnberと呼び出すようだな。うむうむ、これはCと同じだね。
じゃあ早速オブジェクトのフィールドで

$var1 = 1;

と設定した変数を

echo $obj->$var1;

と呼び出すかな。


↓実行後

Object

・・・
なんじゃあコリャぁ!


散々調べて気がついた。正しくは

echo $obj->var1;

と呼び出すべきだったのだ!
おかしいだろ!半日潰れたわ!これじゃオブジェクトの定数を呼び出すことになるだろ?
しかしオブジェクトの定数はなんと

echo $obj::var1;

と呼び出すらしい。
どうもphpの設計者は変数の識別子を「$var1」じゃなくて「$」「var1」と考えているらしい。
だからオブジェクトを呼び出すときは「$」「obj->var1」となるのだろう。命令解析のときもその方が楽そうだしな。


教訓:一応ちゃんとした文法書も読もう。


上記の本には定数・オブジェクトという概念そのものが紹介されていなかったので、こういう違いに気付かなかった。まあ、参考ソースをちゃんと読んでればよかったんだがな。どうも俺は思い込みで書いたりしゃべったりが多くてイカン。恥ずかしい。