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です。
以上