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

  • 2020.6.17

はじめに

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() を使うことで実現できます。

関数を呼び出しているファイルと行番号を取得するためには debug_backtrace() が使えます。

CSS など、お好みでカスタムして使って頂ければと思います。