Более красивая / информативная альтернатива Var_dump в PHP? - PullRequest
131 голосов
/ 26 января 2010

У каждого порядочного программиста PHP есть оболочка print_r или var_dump, которую они используют, любят и назначают сочетания клавиш, почему бы нам не поделиться своими любимыми .

Ответы [ 24 ]

67 голосов
/ 24 января 2011

Целый год времени и труда после того, как я спросил об этом, я наконец-то открыл свою версию var_dump, Kint. Прочтите об этом в на странице проекта , или прямо в github .

Вот скриншот:

kint

Извините за штекер:)


РЕДАКТИРОВАТЬ: Я просто хотел бы напомнить комментаторам, что это не форум поддержки, если у вас возникли проблемы / вам нужна функция, пожалуйста, сообщите о проблеме, Поддержка запрашивающих комментариев будет помечена для удаления.

44 голосов
/ 26 января 2010

Моя предпочтительная функция var_dump, , предоставляемая расширением Xdebug : просто установите расширение (просто, как в Windows, так и в Linux) и var_dump получает лучший результат:

  • лучше форматировать
    • HTML
    • цвет
  • и у вас есть возможность настроить объем отображаемой информации

И быстрый скриншот:

xdebug


И, конечно же, Xdebug приносит множество других полезных вещей, таких как удаленная отладка (например, графическая отладка вашего PHP-приложения, например, в Eclipse PDT) , профилирование, ...

33 голосов
/ 28 декабря 2012

Я написал свой: REF ( демо ):

r() output

Планируется добавить только текстовый рендеринг и отображать информацию о входном выражении, как это делает Кинт ...

24 голосов
/ 21 сентября 2012

Вот мой, который я использую inline, очень полезен:

$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);
16 голосов
/ 26 января 2010

Вы ищете Krumo ( Предупреждение, оповещения Chrome для вредоносных программ ).

Проще говоря, Krumo является заменой для print_r () и var_dump (). По определению Krumo - это инструмент отладки (первоначально для PHP4 / PHP5, теперь только для PHP5), который отображает структурированную информацию о любой переменной PHP.

9 голосов
/ 26 января 2010

Я люблю Firephp плюс firebug

  • записывает информацию о регистрации используя заголовки, чтобы он не ломался AJAX.
  • Дает вам очень хороший графическое представление переменные / объекты, которые вы регистрируете
  • Может отображать имя файла и номер строки, где встречается каждый оператор журнала
  • Простота использования в вашем проекте с процедурным или объектно-ориентированным API
8 голосов
/ 27 сентября 2010

Я использую dBug, который эмулирует тэг Coldfusion cfdump:

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

8 голосов
/ 04 января 2013

Мое (частичное) решение для этого - просто добавить такую ​​функцию (используя Google Chrome):

<?
function console_dump($value)
{ 
?>
<script>
    console.log(<? echo json_encode($value); ?>);
</script>
<?
}
?>

Нажмите Ctrl + Shift + J (открывает консоль), и вы можете найти там структуру JSON. Еще более полезно для симпатичной печати ответов JSON курса.

7 голосов
/ 23 февраля 2014

Полный пример того, что я использую ...

<code><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);

?>

Выходы ...

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
6 голосов
/ 27 августа 2010

Вот мой:

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;
    }
}

В стиле:

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;
}
...