PHPでオブジェクトや変数の中身(メソッド・プロパティ・配列・変数)をすべてテキストで出力する関数

PHPでプログラムを書いていると、変数の中身やオブジェクトの中身メソッド・プロパティ・配列・変数)を全部知りたい時があります。

var_dumpなんかもあるんですけど、この関数は見ずらい上に出力されちゃうので、ファイルに保存したいと時とか、今出力しないで後で出力したいときなんかに困ります。いや、まあそれはそれで方法あるんですけど(笑)

で、もうしょうがないので自分用にオブジェクトや変数の中身を、分かりやすくすべてテキストで出力する関数を作りました。

/**
 * オブジェクトや変数の中身を分かりやすくリストアップしたものを取得
 * @param  String $name $valが変数や配列だった場合の出力に使うラベルテキスト。
 * @param  Any $val  出力対象の変数またはオブジェクト。
 * @return String       リストアップされた変数、プロパティ、メソッドのリスト。
 */
function xnonce_debug_dumpvars($name, $val)
{
    // if (!isset($val)) {return ('');}
    if (is_array($val)) {
        ksort($val);
        foreach ($val as $key => $contents) {
            $key = $name . "['" . $key . "']";
            $ret .= xnonce_debug_dumpvars($key, $contents);
        }
    } else if (is_object($val)) {
        $className = get_class($val);
        $vars = get_class_vars($className);
        $props = get_object_vars($val);
        $methods = get_class_methods($className);
        // if (is_array($vars) && count($vars) > 0) {
        //     $key = 'OBJECT:' . $className . '->(static)';
        //     $ret .= xnonce_debug_dumpvars($key, $vars);
        // }
        if (is_array($props) && count($props) > 0) {
            $key = 'OBJECT:' . $className . '->(property)';
            $ret .= xnonce_debug_dumpvars($key, $props);
        }
        if (is_array($methods) && count($methods) > 0) {
            $key = 'OBJECT:' . $className . '->(method)';
            $ret .= xnonce_debug_dumpvars($key, $methods);
        }
    } else {
        if (is_numeric($val)) {
            $ret = '$' . $name . ' = ' . $val . ";\n";
        } else {
            $val = htmlspecialchars($val);
            $val = preg_replace('/[\r\n]/', '\\n ', $val);
            // $val = mb_strimwidth($val, 0, 40, '…', 'UTF-8');
            $ret = '$' . $name . ' = \'' . $val . "';\n";
        }
    }
    return ($ret);
}

使い方としては、こんな感じで。

// $objの中身を展開
$txt = xnonce_debug_dumpvars('obj', $obj);

// 出力するならこんな感じで。
print '<pre>' . xnonce_debug_dumpvars('obj', $obj) . '</pre>';

// ファイルに保存する場合はこんな感じ。
file_put_contents('./logfile.log',xnonce_debug_dumpvars('obj', $obj));

 

カテゴリーPHP

質問・コメントなどあると嬉しいです