问题

如您所知 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);
}
 

  相同标签的其他问题

phpfirebugvar-dumpfirephp