Developer

【PHP基礎】デバッグ関数
2020.09.30
Lv1

【PHP基礎】デバッグ関数

■デバッグとは

プログラムが意図した動きをしない、不具合が発生する場合に、
その原因(バグ)を探し、取り除く修正作業のことをデバッグといいます。
例えば以下のプログラムにはバグがあります。
※サンプルに配列を使用しています。配列についてはこちらの記事をご参照ください。

1
2
3
4
5
6
7
8
9
10
<?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の結果をログファイルにそのまま書き出すことも可能です。

1
2
3
4
5
6
7
8
9
10
11
12
<?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とそのまま表示することができます。

1
2
3
4
5
6
7
8
9
10
11
12
<?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を指定すると文字列化できます。
細かい違いですが、配列のインデックスに[]がつかなくなります。

1
2
3
4
5
6
7
8
9
10
11
12
<?php
    $nums = array(1, 2, 3, 'a', true, false);
 
    var_export($num);
 
    $sum = 0;
    foreach ($nums as $num) {
        $sum += $num;
    }
 
    echo '合計 : '.$sum;
?>

実行結果

■おまけ

実はデバッグ関数で表示する際、preタグでくくると改行されて見やすくなります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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です。
デバッグの際、表示できるデータは全て表示した方がエラー原因を特定できる可能性が上がるからです。
ユーザーが見るものではなく、開発者が見るものですからね。
またフレームワークにデバッグ用の関数が用意されている場合もありますので、フレームワークを導入されている方はぜひ確認してみてください!

PHP基礎 連載目次リンク

PHP基礎 連載目次