PHPを学習していく際に重要なことの一つに、デバッグを直す訓練をするということです。PHPでバグを直すことは結構大変です。今回は、バグを見つける方法について記述していきたいと思います。8月15日記事
目次
プログラムがうまく動かない現象。
ほとんど(というよりほぼすべて)が人間による入力ミスです。
「パソコンがおかしい!というような思いこみをせず、自分が悪いというように思うようにしましょう。」というニュアンスのことがとある本に書かれていました。
変数を使いまわしていたり、関数を利用して計算していたりすると、この変数にはどういうものが入っているのだろうか。と確認する必要があるということです。
例:曜日番号を取得させるプログラム
<?php //日付を表示させる header("Content-Type: text/html; charset=UTF-8"); $y = 2015; $m = 8; $wdl = date("w", mktime(0, 0, 0, $m, 1, $y));//タイムスタンプを取得して 曜日番号を取得する /* このあと様々なプログラムを書いていったとする・・・。でもwdlにどういう値がはいっているのかわからない。 */ //例えば2015年8月は何曜日からはじまるかを書いた場合。 //$wdlに関数を通じて何か値や文字列が取得されたのだから、どんなものが入っているのかを確認する。 echo $wdl."<br>"; //または print $wdl."<br>"; //というように記述する。 //echo $wdl."<br>"; 確認し終わったらこのようにコメントアウトしておく。またバグがあったときにすぐ呼び出せるので便利 ?>
SQL文と絡み合う場合、sqlコマンドをechoなどで出力して、その結果をphpmyadminかコンソールからSQLコマンドを入力して結果を確かめることも一つの手です。
長いコードを1行に書いていったりして、そのコードを色々といじると、元のコードがなんだかわからなくなってしまいます。そんな中、元のコードを改変したい場合、そのバックアップをとるのにコメントアウトを利用します。
例:if文とかfor文で長い表記がある場合
<?php if(preg_match("/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/",$url)){ echo "正しいURLです。<br>"; }else{ echo "間違いなURLです<br>"; } //これを次のように変えてちょこちょこいじる。 if(preg_match("/^(https?)なんちゃら~~~といじる",$url)){ //if(preg_match("/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/",$uri)){ echo "正しいURLです。<br>"; }else{ echo "間違いなURLです<br>"; } ?>
バックアップ代わりにもなって便利です。複数にわたってコメントアウトしたい場合は/* */を利用するといいと思います。次はPHPでバグの直し方、デバッグの仕方2です。
以上