PHP で var_dump にファイルパスや行番号、スタイルを追加して開発効率をアップ!

はじめに
PHP で変数の中身を調べるために、よく var_dump を使っています。似たような関数に print_r や var_export もありますが、var_dump は型や要素数などの詳細が分かるため、こちらを使うことが多いです。
便利な var_dump ですが、その結果は HTML ではないため、ブラウザで表示すると見づらくなります。特に要素数の多い配列やオブジェクトなどをダンプするときには <pre> タグで囲って使ったりします。
この <pre> で囲む作業、何度も行うとなると結構負担です。
また、比較的大きめのプログラムで var_dump を多用すると、どのファイル の どの部分 で var_dump した結果なのかが分からなくなったりもします。
そこで今日は PHP で var_dump の結果をカスタムして、ファイルのパスや行番号を表示し、また <pre> とスタイルもつけて、より便利に使うアイディアをご紹介します。
今回は Windows 10 の PHP 7.3 で確認しています。
実装方法
下記のように自作関数として実装します。関数名は CakePHP に倣って debug() としました。
/debug.php
<?php
function debug($var)
{
// var_dump の結果を $dump に格納
ob_start();
var_dump($var);
$dump = htmlspecialchars(ob_get_contents(), ENT_QUOTES);
ob_end_clean();
// ファイルパスと行番号を取得
$trace = debug_backtrace();
$file = $trace[0]['file'];
$line = $trace[0]['line'];
// スタイル設定
$boxStyle = implode(';', [
'background-color: #eee',
'border: 1px solid #ddd',
'display: block',
'font-size: 12px',
'letter-spacing: .05em',
'line-height: 150%',
'margin: none',
'padding: 1em',
]);
$fileStyle = implode(';', [
'border-bottom: 1px solid #ddd',
'padding-bottom: .5em',
]);
echo "<div style=\"{$boxStyle}\">"
. "<div style=\"{$fileStyle}\">{$file} (Line: {$line})</div>"
. "<pre style=\"white-space: pre-wrap;\">{$dump}</pre>"
. '</div>';
}
/sample.php
<?php
include 'debug.php';
debug($_SERVER);
var_dump のように、出力された内容を変数に格納するには ob_get_contents() を使うことで実現できます。
- PHP: ob_get_contents - Manual
- https://www.php.net/manual/ja/function.ob-get-contents.php
関数を呼び出しているファイルと行番号を取得するためには debug_backtrace() が使えます。
- PHP: debug_backtrace - Manual
- https://www.php.net/manual/ja/function.debug-backtrace.php
CSS など、お好みでカスタムして使って頂ければと思います。