你知道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,$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(在大多数情况下,这是推荐的编码).如果您使用其他编码(或者您可能考虑切换到UTF-8),则可能需要像utf8_encode()或mb_convert_encoding()这样的东西.
Firebug控制台的输出只是var_export()的输出,前面是变量的类型,包括字符串的长度和数组的数量,以及可选的变量名称.
var_export()提供比var_dump()更可读的输出.如果你真的需要var_dump()的输出,你可以使用这样的东西:
function dump2console($var,$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);
}