php - 发送 "var_dump"到 FireBug 控制台

标签 php firebug var-dump firephp

如您所知,var_dump() 除了值之外还显示其数据类型长度

有没有办法将其输出记录到FireBug控制台

我尝试了FirePHPFireLogger,但两者都只输出变量值(有时甚至是不正确的变量值)。

最佳答案

也许你需要的是这样的:

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/

相关文章:

html - 为什么无法访问 CSS 选择器?

php - 为什么我只能在使用之前 dump() 时才能到达日期对象?

php - phpcs 的 PSR-2 编码标准和 Symfony2 编码标准之间的主要区别是什么?

php - 以 PHP 形式发送数组值

javascript - 在 Node.js 中读取套接字连接响应

isset 形式 POST 值的 PHP 简写

css - 无法使用 class=pull-right 或 float :right 向右浮动 twitter Bootstrap 导航栏元素

javascript - 提交请求后如何查看完整的 URL?

php - 为什么 var_dump 显示文件名和行号?

php - json_encode() 返回 false