PHP中一个更漂亮/信息丰富的Var_dump替代方案?

rav*_*ren 131 php variables debugging var-dump

每一个体面的PHP程序员有一个print_rvar_dump包装他们使用,爱情和指定快捷键,我们为什么不分享我们最喜欢的人.

rav*_*ren 67

在问了这一整年的时间和劳动之后,我终于开源了我的版本var_dump,Kint.在项目页面中或直接在github中阅读它.

这是一个截图:

编制品

对不起插头:)


编辑:我想提醒评论者,这不是一个支持论坛,如果您遇到问题/想要一个功能,请提出问题.支持请求评论将被标记为删除.

  • 举个例子,如果你转储一个对象,Kint会显示保护变量和私有变量,krumo不会(因为只有前者使用我假设的反射类).一般来说,我发现Kint是优越的; 虽然我还必须调整css以使其更有用(当倾倒大量嵌套的propierties时,这种巨大的字体不能很好地工作).哦,它背后的代码并不是一团糟,不能说Krumo(对不起Krumo作者!) (2认同)

Pas*_*TIN 44

我上首选的是var_dump功能,如Xdebug扩展提供:刚安装扩展(容易,无论是在Windows和Linux) ,并var_dump得到一个更好的输出:

  • 更好的格式化
    • HTML
    • 颜色
  • 并且您可以选择调整应显示的信息量

并快速截图:

Xdebug的


而且,当然,Xdebug带来了许多其他有用的东西,比如远程调试(例如PHP应用程序的图形调试,例如Eclipse PDT),分析,......


nic*_*ass 33

我写了自己的:REF(演示):

r()输出

计划是添加纯文本渲染,并显示有关输入表达式的信息,如Kint ...

  • 干得好,工具很好 (3认同)
  • REF 很棒,色彩丰富,速度快。我用它所有的时间。 (2认同)
  • 很棒的工具,我刚刚切换到它。谢谢! (2认同)

Gui*_*ips 26

这是我的,我使用内联,非常有用:

$pretty = function($v='',$c="&nbsp;&nbsp;&nbsp;&nbsp;",$in=-1,$k=null)use(&$pretty){$r='';if(in_array(gettype($v),array('object','array'))){$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").'<br>';foreach($v as $sk=>$vl){$r.=$pretty($vl,$c,$in+1,$sk).'<br>';}}else{$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").(is_null($v)?'&lt;NULL&gt;':"<strong>$v</strong>");}return$r;};

echo $pretty($some_variable);
Run Code Online (Sandbox Code Playgroud)

  • 这美妙地结合了print_r,var_dump和var_export中所有**最差的**功能.没有html转义,只接受单个参数,挂起递归,无法返回输出,只是最重要的,它是[完全不可读](http://i.imgur.com/D7vY4eu.png).我不想成为一个混蛋,但评论只是让它看起来如此完美. (7认同)
  • 喜欢这个功能 - 简单明了,我提到很容易:) (2认同)
  • IMO最好的单行解决方案就是`function pretty(){echo'<pre>'; foreach(func_get_args()as $ arg){ob_start(); var_dump($ arg); echo htmlentities(ob_get_clean())." \n ##### \n ##### \n \n";}死;}`.Var_dump是一个非常详细的函数,它处理所有PHP边缘情况(其中有LOTS)并且100%稳定,即使不是那么可读.但是在一天结束的时候,如果你发现你的实现最适合你,那么你肯定应该使用它. (2认同)

Pek*_*ica 16

您正在寻找Krumo(警告,恶意软件的Chrome警报).

简而言之,Krumo是print_r()和var_dump()的替代品.根据定义,Krumo是一个调试工具(最初用于PHP4/PHP5,现在仅用于PHP5),它显示有关任何PHP变量的结构化信息.

  • 当我尝试它时,它被打破了.我报了,但没有回复也没有新版本 (2认同)
  • @Pekka链接在Chrome中引发了恶意软件警告。 (2认同)

Joh*_*hrn 9

我喜欢Firephpfirebug

  • 它使用标头写出日志信息,因此它不会破坏AJAX.
  • 为您提供记录的变量/对象的非常好的图形表示
  • 可以显示每个日志语句出现的文件名和行号
  • 易于在项目中使用,可以使用过程API或面向对象的API


jCl*_*ark 8

我一直在使用dBug,它模拟Coldfusion的真棒cfdump标签:

http://dbug.ospinto.com/examples.php


Tim*_*Tim 8

我的(部分)解决方案是简单地添加这样的功能(使用谷歌浏览器):

<?
function console_dump($value)
{ 
?>
<script>
    console.log(<? echo json_encode($value); ?>);
</script>
<?
}
?>
Run Code Online (Sandbox Code Playgroud)

按Ctrl + Shift + J(打开控制台),您可以在那里找到JSON结构.对于JSON应答程序的漂亮打印更有用.


Ant*_*ife 7

我用的一个完整的例子......

<pre>

<?php


//*********** Set up some sample data

$obj = new stdClass;
$obj->a=123;
$obj->pl=44;
$obj->l=array(31,32);

$options = array(
  'Orchestra'=>array(1=>'Strings', 8=>'Brass', 9=>$obj, 3=>'Woodwind', 16=>'Percussion'),
  2=>'Car',
  4=>'Bus',
  'TV'=>array(21=>'Only Fools', 215=>'Brass Eye', 23=>'Vic Bob',44=>null, 89=>false));


//*********** Define the function

function dump($data, $indent=0) {
  $retval = '';
  $prefix=\str_repeat(' |  ', $indent);
  if (\is_numeric($data)) $retval.= "Number: $data";
  elseif (\is_string($data)) $retval.= "String: '$data'";
  elseif (\is_null($data)) $retval.= "NULL";
  elseif ($data===true) $retval.= "TRUE";
  elseif ($data===false) $retval.= "FALSE";
  elseif (is_array($data)) {
    $retval.= "Array (".count($data).')';
    $indent++;
    foreach($data AS $key => $value) {
      $retval.= "\n$prefix [$key] = ";
      $retval.= dump($value, $indent);
    }
  }
  elseif (is_object($data)) {
    $retval.= "Object (".get_class($data).")";
    $indent++;
    foreach($data AS $key => $value) {
      $retval.= "\n$prefix $key -> ";
      $retval.= dump($value, $indent);
    }
  }
  return $retval;
}


//*********** Dump the data

echo dump($options);

?>
</pre>
Run Code Online (Sandbox Code Playgroud)

输出......

Array (4)
 [Orchestra] = Array (5)
 |   [1] = String: 'Strings'
 |   [8] = String: 'Brass'
 |   [9] = Object (stdClass)
 |   |   a -> Number: 123
 |   |   pl -> Number: 44
 |   |   l -> Array (2)
 |   |   |   [0] = Number: 31
 |   |   |   [1] = Number: 32
 |   [3] = String: 'Woodwind'
 |   [16] = String: 'Percussion'
 [2] = String: 'Car'
 [4] = String: 'Bus'
 [TV] = Array (5)
 |   [21] = String: 'Only Fools'
 |   [215] = String: 'Brass Eye'
 |   [23] = String: 'Vic Bob'
 |   [44] = NULL
 |   [89] = FALSE
Run Code Online (Sandbox Code Playgroud)


小智 6

这是我的:

class sbwDebug
{
    public static function varToHtml($var = '', $key = '')
    {
        $type = gettype($var);
        $result = '';

        if (in_array($type, ['object', 'array'])) {
            $result .= '
        <table class="debug-table">
            <tr>
            <td class="debug-key-cell"><b>' . $key . '</b><br/>Type: ' . $type . '<br/>Length: ' . count($var) . '</td>
            <td class="debug-value-cell">';

            foreach ($var as $akey => $val) {
                $result .= sbwDebug::varToHtml($val, $akey);
            }
            $result .= '</td></tr></table>';
        } else {
            $result .= '<div class="debug-item"><span class="debug-label">' . $key . ' (' . $type . '): </span><span class="debug-value">' . $var . '</span></div>';
        }

        return $result;
    }
}
Run Code Online (Sandbox Code Playgroud)

风格:

table.debug-table {
  padding: 0;
  margin: 0;
  font-family: arial,tahoma,helvetica,sans-serif;
  font-size: 11px;
}

td.debug-key-cell {
  vertical-align: top;
  padding: 3px;
  border: 1px solid #AAAAAA;
}

td.debug-value-cell {
  vertical-align: top;
  padding: 3px;
  border: 1px solid #AAAAAA;
}

div.debug-item {
  border-bottom: 1px dotted #AAAAAA;
}

span.debug-label {
  font-weight: bold;
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上还不错.如果您展示输出的示例,可能会被投票更多. (2认同)
  • 我收到了"致命错误:未找到班级'sbwDebug'" (2认同)

Ale*_*spo 5

我最近开发了一个免费的chrome扩展(正在进行中),以便美化我的var转储,没有库,没有预标记,也没有安装到每个应用程序.全部使用JavaScript和regEx完成.你所要做的就是安装扩展程序和你的好处.我也在开发Firefox版本.这是GitHub页面.我希望很快就能在chrome和firefox网站上提供它!

https://github.com/alexnaspo/var_dumpling

这是一个示例输出:

示例输出

  • 好兄弟!刚下载了您的扩展程序,它完美无缺!谢谢! (6认同)
  • 伙计......谢谢.我一直在寻找这样的东西 (5认同)