2010年7月2日金曜日

PHP:プログラムを作ってみた

 PHP のマニュアルをだいぶ読み進んだので、実際のコードを少し追ってみたくなった。

 が、適当なソースが見当たらない。いきなり symfony などの大きなものに挑戦すると、挫折するのが目に見えている。

 なので、ちょっとしたコードを書いてみることにした。ネタは 8queen。最初にプログラムを見たのは、確か、PC-8001 用のものを雑誌で。当時は Z80 アセンブラに書き換えて「早い早い!」と喜んでいたものだ。

 それ以来、何度か書いたことはあったが、多分ここ10年ぐらいは書いてない。まずは、腕慣らしをかねて C で (^^;。再帰を使った 50行弱のコード。一時間弱で完成。
 一休みして、これを PHP に書き換え。昔の BASIC では変数名の後ろに $ がつくのは文字列型のしるしだったのだが、とか思いつつ30分弱で書き換え完了。

 動かしてみると、延々となにやらエラーメッセージを表示。えぇ、PHP ってエラーがあっても止まらないの??

 メッセージを出していたエラーを直して実行すると、今度は結果がでない。
 echo をあっちこっち突っ込んで変数を表示させたり、盤を 8×8 から小さくしていろいろ試しているうちに、なぜか動いてしまった。
 デバッグ用の出力文をはずしていくが、正常に動き続ける。

 なぜ???

 よくよく調べると、元のコードではグローバール変数を global 宣言していかった。
 盤のデータをグローバル変数に取っていたのだが、元のプログラムが C なので、当然 global 宣言などない。盤のデータを読むほうの関数は'未定義の変数'とエラーになったのだが、値を書く方の関数は宣言しなくても代入できるわけだからエラーにならない。

 抜かった orz。

 最近の C なら、'値の使われない変数'とかのワーニングを出してくれるのに...。

 C の感覚のままでは、なかなか手ごわそうだ。
 

0 件のコメント:

コメントを投稿