将"var_dump"发送到FireBug控制台

PHP*_*Pst 11 php firebug firephp var-dump

如您所知var_dump(),除了显示其数据类型长度.

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

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

Mar*_*ark 16

您可以通过在脚本标记中放置console.log()来将JavaScript转储到控制台:

<script type="text/javascript">
console.log("hello");
</script>
Run Code Online (Sandbox Code Playgroud)

所以,如果你在那里做一个PHP转储...

<script type="text/javascript">
console.log("<?php var_dump('abc'); ?>");
</script>
Run Code Online (Sandbox Code Playgroud)

你只需要小心var_dump中的'和'来打破你的JavaScript.在这个例子中它会没问题,因为HTML会是:

<script type="text/javascript">
console.log("string 'abc' (length=3)");
</script>
Run Code Online (Sandbox Code Playgroud)

只记得处理完PHP然后放入JavaScript.您也可以将其转储到评论中:

<!--
<?php 
var_dump('abc');
?>
-->
Run Code Online (Sandbox Code Playgroud)

然后你可以查看source或inspect元素.


Wal*_*oss 16

也许你需要的是这样的:

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);
   }
}
Run Code Online (Sandbox Code Playgroud)

用法: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);
}
Run Code Online (Sandbox Code Playgroud)

用法:dump2console($myvar, '$myvar');或简单dump2console($myvar);

你应该避免使用循环引用(var_dump()检测它们的步骤太晚了,var_export()根本不检测它们).这是如何做到的,例如$GLOBALS:

function globals2console($now=false)
{
   $g = $GLOBALS;
   $g['GLOBALS'] = '(recursion)';
   var2console($g, '$GLOBALS', $now);
}
Run Code Online (Sandbox Code Playgroud)


Col*_*mes 5

<script>console.log( <?= json_encode( $var ) ?> )</script>
Run Code Online (Sandbox Code Playgroud)

把帽子扔进戒指.听起来像FirePHP是最好的方式.