如您所知,var_dump()
除了值之外还显示其数据类型和长度。
有没有办法将其输出记录到FireBug控制台?
我尝试了FirePHP和FireLogger,但两者都只输出变量值(有时甚至是不正确的变量值)。
最佳答案
也许你需要的是这样的:
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);
}
关于php - 发送 "var_dump"到 FireBug 控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14995307/