PHP のマニュアルをだいぶ読み進んだので、実際のコードを少し追ってみたくなった。
が、適当なソースが見当たらない。いきなり symfony などの大きなものに挑戦すると、挫折するのが目に見えている。
なので、ちょっとしたコードを書いてみることにした。ネタは 8queen。最初にプログラムを見たのは、確か、PC-8001 用のものを雑誌で。当時は Z80 アセンブラに書き換えて「早い早い!」と喜んでいたものだ。
それ以来、何度か書いたことはあったが、多分ここ10年ぐらいは書いてない。まずは、腕慣らしをかねて C で (^^;。再帰を使った 50行弱のコード。一時間弱で完成。
一休みして、これを PHP に書き換え。昔の BASIC では変数名の後ろに $ がつくのは文字列型のしるしだったのだが、とか思いつつ30分弱で書き換え完了。
動かしてみると、延々となにやらエラーメッセージを表示。えぇ、PHP ってエラーがあっても止まらないの??
メッセージを出していたエラーを直して実行すると、今度は結果がでない。
echo をあっちこっち突っ込んで変数を表示させたり、盤を 8×8 から小さくしていろいろ試しているうちに、なぜか動いてしまった。
デバッグ用の出力文をはずしていくが、正常に動き続ける。
なぜ???
よくよく調べると、元のコードではグローバール変数を global 宣言していかった。
盤のデータをグローバル変数に取っていたのだが、元のプログラムが C なので、当然 global 宣言などない。盤のデータを読むほうの関数は'未定義の変数'とエラーになったのだが、値を書く方の関数は宣言しなくても代入できるわけだからエラーにならない。
抜かった orz。
最近の C なら、'値の使われない変数'とかのワーニングを出してくれるのに...。
C の感覚のままでは、なかなか手ごわそうだ。
0 件のコメント:
コメントを投稿