目次
1. 本記事のポイント
- PHPの代表的なデバッグ用関数(var_dump / print_r / debug_backtrace)の違いと使い分けを解説
- 各関数の出力形式や活用場面を、実行可能なコード付きで紹介
- 誤用による出力の誤認や、実務でありがちな落とし穴にも注意喚起
2. PHPのデバッグ関数とは?
PHPには、コードの実行状況や変数の中身を確認するための「デバッグ用関数」が標準でいくつか用意されています。
特に代表的なのが var_dump()
、print_r()
、debug_backtrace()
の3つで、いずれもXdebugなどの外部ツールを使わずに、PHPだけで実行内容を確認できます。
これらは主に以下のような目的で使われます:
- 変数の中身を確認したいとき(構造や型も含めて)
- 実行フローの追跡や関数の呼び出し履歴を調べたいとき
- テストコードやトラブルシュート時に、内部状態を一時的に出力したいとき
ただし、これらの関数は「本番環境では使わない」が原則です。ログに残ったりセキュリティ上の情報が露出したりするため、開発環境での一時的な利用にとどめるべきです。
3. 詳細解説
var_dump:詳細な型・長さ付きの出力が欲しいとき
var_dump(mixed $value): void
は、変数の中身・型・サイズまで含めて詳細に出力します。
PHP
// 配列の構造と型を確認したいとき
$data = ["id" => 1, "name" => "Alice", "is_active" => true];
var_dump($data);
出力例:
PHP
array(3) {
["id"]=>
int(1)
["name"]=>
string(5) "Alice"
["is_active"]=>
bool(true)
}
構造のネストが深くても、明示的にすべての型が表示されるため、配列やオブジェクトの解析に適しています。
print_r:ざっくり中身を見たいときに便利
print_r(mixed $value, bool $return = false): string|bool
は、配列やオブジェクトの構造を人間にとって読みやすい形で出力します。
PHP
// 変数の中身を軽く見たいとき
$user = ["id" => 2, "name" => "Bob"];
print_r($user);
出力例:
PHP
Array
(
[id] => 2
[name] => Bob
)
var_dump
と比べて型情報は省略されますが、出力が見やすく、確認スピード重視の場面で使われます。
debug_backtrace:関数の呼び出し履歴を確認したいとき
debug_backtrace
は、実行中の関数呼び出しの履歴を配列で取得できます。
PHP
function third() {
print_r(debug_backtrace());
}
function second() {
third();
}
function first() {
second();
}
first();
出力例(抜粋):
PHP
Array
(
[0] => Array
(
[file] => /path/to/file.php
[line] => 3
[function] => third
[args] => Array()
)
[1] => Array
(
[file] => /path/to/file.php
[line] => 7
[function] => second
)
...
)
ログのようにフローを遡れるため、予期せぬ呼び出しや多重呼び出しの検証に有効です。
4. よくあるミス・誤解・落とし穴
print_r()
はスカラー値に対して使っても意味が薄く、単なる文字列出力になります。var_dump()
の出力はそのままでは見づらく、HTMLでは<pre>
タグで囲むなどの工夫が必要です。debug_backtrace()
は返り値が配列であり、直接echo
しても意味のある出力にはなりません。print_r
やvar_dump
で出力すべきです。var_export()
とprint_r()
を混同するケースもありますが、var_export()
は構文的に有効なPHPコードを返す点で異なります。- Xdebugと併用する場合、設定によっては
var_dump
の出力が整形されるため、出力の形式差異に注意が必要です。
5. まとめ
PHPのデバッグ関数は、場面に応じた使い分けが重要です。
- 詳細確認には
var_dump()
- 簡易チェックには
print_r()
- 呼び出し履歴の追跡には
debug_backtrace()
いずれも「何を知りたいか」を明確にして使い分けることで、無駄な出力や誤解を防ぎ、効率的なデバッグが可能になります。
開発環境以外では使用を避けるべきであり、使用後の削除・コメントアウトを忘れない運用が重要です。