【PHP基礎】デバッグ関数
■デバッグとは
プログラムが意図した動きをしない、不具合が発生する場合に、
その原因(バグ)を探し、取り除く修正作業のことをデバッグといいます。
例えば以下のプログラムにはバグがあります。
※サンプルに配列を使用しています。配列についてはこちらの記事をご参照ください。
<?php $nums = array(1, 2, 3, 'a', true, false); $sum = 0; foreach ($nums as $num) { $sum += $num; } echo '合計 : '.$sum; ?>
今回はコードも短くミスが見つけやすいですが、実際の開発プロジェクトのコードはもっと量が多く、バグの箇所を見つけるのは大変です。
そんなときに役立つのがデバッグ関数です。
■デバッグに便利な関数
デバッグを行う上で、どこまでは正常に処理され、
どの場所で異常な処理が行われているかを探すために、変数の中身を確認しながら処理を追っていきます。
その際に使用する便利な関数がありますのでご紹介します。
print_r関数
print_r関数の後ろのカッコの中(引数)に変数を指定すると、その変数に格納された値を表示することができます。
echo や print とは異なり、配列の中身も表示することが可能です。
また、第二引数にtrueを指定した場合、関数の実行結果が文字列として扱われるため、print_rの結果をログファイルにそのまま書き出すことも可能です。
<?php $nums = array(1, 2, 3, 'a', true, false); print_r($num); $sum = 0; foreach ($nums as $num) { $sum += $num; } echo '合計 : '.$sum; ?>
var_dump関数
var_dump関数も引数に変数を指定すると、その中身を表示してくれます。
print_rと異なる点は、値のデータ型が表示される点です。
また、print_rでtrueやfalseのようなbool型の値を出力すると、1や空白として表示されてしまいましたが、
var_dumpの場合はtrue/falseとそのまま表示することができます。
<?php $nums = array(1, 2, 3, 'a', true, false); var_dump($num); $sum = 0; foreach ($nums as $num) { $sum += $num; } echo '合計 : '.$sum; ?>
var_export関数
var_export関数の場合は、データ型は表示されませんが、true/falseがそのまま表示されます。
また、print_rと同じで第二引数にtrueを指定すると文字列化できます。
細かい違いですが、配列のインデックスに[]がつかなくなります。
<?php $nums = array(1, 2, 3, 'a', true, false); var_export($num); $sum = 0; foreach ($nums as $num) { $sum += $num; } echo '合計 : '.$sum; ?>
■おまけ
実はデバッグ関数で表示する際、preタグでくくると改行されて見やすくなります。
<?php $nums = array(1, 2, 3, 'a', true, false); echo '<div>print_r関数</div>'; echo '<pre>'; print_r($nums); echo '</pre>'; echo '<hr>'; echo '<div>var_dump関数</div>'; echo '<pre>'; var_dump($nums); echo '</pre>'; echo '<hr>'; echo '<div>var_export関数</div>'; echo '<pre>'; var_export($nums); echo '</pre>'; ?>
■まとめ
デバッグ関数を3つご紹介しました!
特徴を表でまとめてみます。
データ型の表示 | bool型の表示 | 文字列化 | |
---|---|---|---|
print_r | ✕ | 1または空白 | ○ |
var_dump | ○ | trueまたはfalse | ✕ |
print_r | ✕ | trueまたはfalse | ○ |
個人的に一番使用するのはvar_dumpです。
デバッグの際、表示できるデータは全て表示した方がエラー原因を特定できる可能性が上がるからです。
ユーザーが見るものではなく、開発者が見るものですからね。
またフレームワークにデバッグ用の関数が用意されている場合もありますので、フレームワークを導入されている方はぜひ確認してみてください!