var_dumpやdebug_print_backtraceをやめてconsole.logを使おう

June 21, 2012,
tags: php


このエントリーをはてなブックマークに追加

phpの配列の中身を確認するときってvar_dump使って出力すると便利ですよね。
あとはdebug_print_backtraceなんかで中身を確認するとかも便利ですよね。

開発時にはよく使ったりしますが、htmlのレイアウト崩れたして不便だったり見にくかったりする場合も多々あるかと思います。

なんか良い解決策がないのかなぁーとかおもって、悩んでいたところ
「var_dumpがいやなら、console.logつかえばいいじゃない」
って天の声が聞こえました(・∀・)!

早速実装してみました。

js_console_log.php

function js_console_log( $array, $label = "", $trace = false, $trace_options = array() ) {
	if ( !is_array( $array ) ) {
		$array = array( $array );
	}

	if ( !empty( $label ) ) {
		$array = array(
			$label => $array,
		);
	}
	$array['__info']['message'] = 'output by js_console_log function';

	if ( $trace ) {

		if ( !isset( $trace_options[0] ) ) {
			$trace_options[0] = DEBUG_BACKTRACE_PROVIDE_OBJECT;
		}
		if ( !isset( $trace_options[1] ) ) {
			$trace_options[1] = 0;
		}
		$array['__info']['trace'] = PHP_VERSION_ID < 50400 ? debug_backtrace($trace_options[0]) : debug_backtrace($trace_options[0], $trace_options[1]);
	}

	$json = json_encode( $array );
	echo '<script type="text/javascript">';
	// IE対策
	echo "if (!('console' in window)) {";
	echo "    window.console = {};";
	echo "    window.console.log = function(str){   return str; };";
	echo "}";
	echo "console.log({$json})";
	echo '</script>';
}

使い方は以下の通りにしていただければ良いかと思います。
index.php

<?php
require "./js_console_log.php";
$test = array(
	1 => 'polidog',
	2 => '望月涼太',
	3 => 'ポリドッグ',
	4 => 'もちづきりょうた',
);

// (1)単純に配列だけをconsole.logつかって出力する
js_console_log($test);

// (2)ラベル付きでだす
js_console_log($test,'test1');

// (3)スタックトレースまで表示しちゃう
js_console_log($test,'test1',true);

// (4)スタックトレースのオプションまで指定しちゃう
js_console_log($test,'test1',true,array(DEBUG_BACKTRACE_IGNORE_ARGS));

chromeとかでの出力はこんな感じで出力されます。

(1)単純に配列だけをconsole.log使って出力する

(2)ラベル付きでだす

(3)スタックトレースまで表示しちゃう

スタックトレースはinfo.traceの中に入っています。
あと
infoにjs_console_logを使って出力したメッセージも一応混ぜてあります。
なんのためにconsole.logを吐いているか忘れないようにw

comments powered by Disqus