如您所知
var_dump()
除了显示值
数据类型
和
长度
.
有什么办法可以将其输出记录到 FireBug控制台 ?
我试过了 火狐 和 消防记录仪 但两者都仅输出变量的值(有时甚至输出错误的变量值)。
如您所知
var_dump()
除了显示值
数据类型
和
长度
.
有什么办法可以将其输出记录到 FireBug控制台 ?
我试过了 火狐 和 消防记录仪 但两者都仅输出变量的值(有时甚至输出错误的变量值)。
也许您需要的是这样的东西:
function var2console($var, $name='', $now=false)
{
if ($var === null) $type = 'NULL';
else if (is_bool ($var)) $type = 'BOOL';
else if (is_string ($var)) $type = 'STRING['.strlen($var).']';
else if (is_int ($var)) $type = 'INT';
else if (is_float ($var)) $type = 'FLOAT';
else if (is_array ($var)) $type = 'ARRAY['.count($var).']';
else if (is_object ($var)) $type = 'OBJECT';
else if (is_resource($var)) $type = 'RESOURCE';
else $type = '???';
if (strlen($name)) {
str2console("$type $name = ".var_export($var, true).';', $now);
} else {
str2console("$type = " .var_export($var, true).';', $now);
}
}
function str2console($str, $now=false)
{
if ($now) {
echo "<script type='text/javascript'>\n";
echo "//<![CDATA[\n";
echo "console.log(", json_encode($str), ");\n";
echo "//]]>\n";
echo "</script>";
} else {
register_shutdown_function('str2console', $str, true);
}
}
用法:
var2console($myvar, '$myvar');
或简单地
var2console($myvar);
很少需要将
$now
参数设置为
true
,从而导致
<script>
标签的立即输出。使用
register_shutdown_function()
的优点是您不需要注意HTML中的“您所在的位置”。
json_encode()
保留从PHP到JavaScript的传输中的所有字符。唯一需要注意的是关于编码:
json_encode()
仅与
UTF-8
一起使用(无论如何,在大多数情况下建议使用编码)。如果您使用其他编码,则可能需要类似
utf8_encode()
或
mb_convert_encoding()
之类的东西(或者更确切地说,您可以考虑切换到
UTF-8
)。
Firebug控制台的输出只是
var_export()
的输出,其前面是变量的类型,包括字符串的长度和数组的数量,以及变量的名称。
var_export()
提供比
var_dump()
更可读的输出。如果您确实需要
var_dump()
的输出,则可以使用以下内容:
function dump2console($var, $name='', $now=false)
{
ob_start();
if (strlen($name)) {
echo "$name =\n";
}
var_dump($var);
$str = ob_get_clean();
str2console($str, $now);
}
用法:
dump2console($myvar, '$myvar');
或简称为
dump2console($myvar);
您应该避免使用循环引用(
var_dump()
检测它们太迟了,而
var_export()
根本没有检测到它们)。这是例如
$GLOBALS
的操作方法:
function globals2console($now=false)
{
$g = $GLOBALS;
$g['GLOBALS'] = '(recursion)';
var2console($g, '$GLOBALS', $now);
}