也许你需要的是这样的:
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);
}