Developer

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

【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です。
デバッグの際、表示できるデータは全て表示した方がエラー原因を特定できる可能性が上がるからです。
ユーザーが見るものではなく、開発者が見るものですからね。
またフレームワークにデバッグ用の関数が用意されている場合もありますので、フレームワークを導入されている方はぜひ確認してみてください!

PHP基礎 連載目次リンク

PHP基礎 連載目次