秘伝の var_dump 関数を公開します。

  • 56
    いいね
  • 0
    コメント

様々なプロジェクトを渡り歩き少しずつ改良しながら使ってきた秘伝の var_dump() ラッパー関数です。

function d()
{
    // var_dump() の出力内容を変数に取り出し
    ob_start();
    foreach (func_get_args() as $arg) {
        var_dump($arg);
    }
    $dump = ob_get_contents();
    ob_end_clean();

    // 可読性のためインデント幅を2倍に (2 -> 4)
    $dump = preg_replace_callback(
        '/^\s++/m',
        function ($m) {
            return str_repeat(" ", strlen($m[0]) * 2);
        },
        $dump
    );

    // この関数の呼び出し元を取得 (ファイルパス・行番号)
    $caller = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0];

    $header = "";
    $header .= "<pre style='border:1px solid #bbb; margin:2px; padding:6px; text-align:left; background:#fdfdfd; color:#000; font-family:monospace,serif; font-size:12px;'>";
    $header .= "<span style='font-weight: bold;'>{$caller['file']}:{$caller['line']}</span>\n";

    $footer = "</pre>\n";

    // ダンプ内容を出力 (CLI で実行された場合は HTML タグを取り除く)
    $isCli = (php_sapi_name() === 'cli');
    echo $isCli ? strip_tags($header) : $header;
    echo $dump;
    echo $isCli ? strip_tags($footer) : $footer;
}

ポイント

  • 関数名が一文字なので手軽です。
  • HTML + CSS で見やすく装飾されます。
    • コマンドラインから実行した場合は HTML は取り除かれ plain なテキストでダンプされます。
  • 可変長引数に対応しています。
    • 例: d($var1, $var2, $var3);
  • ダンプ元のファイルパスと行番号も出力されるので、どこに書いたか忘れちゃっても大丈夫です。
    • 出力フォーマットは ファイルパス:行番号 なので、そのままコピーして PhpStorm のファイルナビゲート欄 (Mac: ⇧⌘O / Win: Ctrl + Shift + N) とかに貼りつければダンプ元にジャンプできます。

なんだかんだ PHP で一番頼りになるデバッグ方法は愚直な変数ダンプだと思ってる。(個人の感想です。)