Более симпатичная / информативная альтернатива Var_dump в PHP?


Answers

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

  • лучшее формирование
    • HTML
    • цвета
  • и у вас есть опции для настройки того, сколько информации должно отображаться

И быстрый снимок экрана:


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

Question

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




Я предпочитаю отлаживать от https://github.com/hazardland/debug.php который является библиотекой, содержащей только одну функцию с именем debug (вы можете просто скопировать эту функцию в свой проект или в свою библиотеку) . Типичный вывод debug () html выглядит следующим образом:

Но вы можете выводить данные в виде обычного текста с одинаковой функцией (с 4 вкладками с отступом в пространстве), подобными этому (и даже при необходимости записывать его в файл):

string : "Test string"
boolean : true
integer : 17
float : 9.99
array (array)
    bob : "alice"
    1 : 5
    2 : 1.4
object (test2)
    another (test3)
        string1 : "3d level"
        string2 : "123"
        complicated (test4)
            enough : "Level 4"






PHP Array Beautifier Этот простой инструмент принимает вывод массива или объекта в PHP, такой как оператор print_r () и форматирует его в цветовом кодировании, чтобы легко читать ваши данные. http://phillihp.com/toolz/php-array-beautifier/




Вот мой, который я использую 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);



Вот мой:

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

      if (in_array($type, array('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;
}






Я люблю Firephp plus firebug

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









Я удивлен, что никто не упомянул простейший (хотя и не очень красивый) код. Если вы просто хотите получить удобочитаемый вывод (без цветов или отступов), простую <pre> вокруг var_dump работает, как в:

echo "<pre>";
var_dump($myvariable);
echo "</pre>";

Не может быть намного ниже, чем это!