debugging 객체 출력 - 더 예쁜 / 유익한 Var_dump PHP의 대안?





12 Answers

Xdebug 확장에 의해 제공되는 var_dump 함수가 선호됩니다 . Windows와 Linux 모두에서 확장 기능을 설치하기 만하면됩니다. var_dump 는 더 나은 결과를 얻습니다 :

  • 더 나은 포매팅
    • HTML
    • 그림 물감
  • 표시 할 정보의 양을 조정할 수있는 옵션이 있습니다.

그리고 빠른 스크린 샷 :


그리고 물론 Xdebug는 원격 디버깅 (예 : Eclipse PDT에서 PHP 응용 프로그램의 그래픽 디버깅) , 프로파일 링 등과 같은 다른 유용한 기능을 제공합니다 .

br echo array

괜찮은 PHP 프로그래머는 print_r 또는 var_dump 래퍼를 사용하여 단축키를 지정하고 사랑하고 할당 합니다 . 우리가 좋아하는 것을 공유 하지 않는 것이 어떻습니까?




여기에 제가 사용하는 인라인인데, 매우 유용합니다 :

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



나는 firebug 플러스 firebug 좋아한다.

  • 헤더를 사용하여 로깅 정보를 기록하므로 AJAX가 중단되지 않습니다.
  • 로그하는 변수 / 객체에 대한 아주 멋진 그래픽 표현을 제공합니다.
  • 각 로그 문이 발생하는 곳에 파일 이름과 행 번호를 표시 할 수 있습니다.
  • 프로 시저 또는 객체 지향 API로 프로젝트에서 사용하기 쉽습니다.



이를위한 (부분) 해결책은 간단히 다음과 같은 함수를 추가하는 것입니다 (Google 크롬 사용).

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

Ctrl + Shift + J (콘솔 열기)를 누르면 JSON 구조를 찾을 수 있습니다. 물론 JSON 응답의 멋진 인쇄물에 유용합니다.




여기 내 것이 있습니다 :

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



트레이시dump () 함수를 사용하여 아름다운 접을 수있는 출력을 제공 합니다 .







PHP Array Beautifier이 간단한 도구는 print_r () 문과 같은 PHP의 배열 또는 객체 출력을 가져 와서 데이터를 쉽게 읽을 수 있도록 색상 코드로 형식을 지정합니다. http://phillihp.com/toolz/php-array-beautifier/







내가 선호하는 것은 https://github.com/hazardland/debug.php 디버그 로, 디버그 라는 이름의 단일 함수 만 포함하는 라이브러리입니다 (프로젝트 또는 라이브러리에서이 함수를 복사 할 수 있습니다) . 일반적인 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"



내, 더 간단합니다, 나에 대한 지식이 많지 않습니다 / 인프라를 설치하는 xdebug 등을 변경할 시간이 없습니다.

그리고 다른 경우에는, 예를 들어 간단한 WP 웹 사이트를 위해 많은 것을 필요로하지 않습니다.

그래서 나는 다음을 사용한다.

highlight_string("\n<?" . var_export($var, true) . "?>\n");

그게 정말 많은 도움이됩니다.

DevConsole 환경을 선호하기 때문에이 멋진 기능을 사용합니다.

https://codeinphp.github.io/post/outputting-php-to-browser-console/

작은 조정 :

<?php 

/**
 * Logs messages/variables/data to browser console from within php
 *
 * @param $name: message to be shown for optional data/vars
 * @param $data: variable (scalar/mixed) arrays/objects, etc to be logged
 * @param $jsEval: whether to apply JS eval() to arrays/objects
 *
 * @return none
 * @author Sarfraz
 */
function logConsole($name, $data = NULL, $jsEval = FALSE)
{
     if (! $name) return false;

     $isevaled = false;
     $type = ($data || gettype($data)) ? 'Type: ' . gettype($data) : '';

     if ($jsEval && (is_array($data) || is_object($data)))
     {
          $data = 'eval(' . preg_replace('#[\s\r\n\t\0\x0B]+#', '', json_encode($data)) . ')';
          $isevaled = true;
     }
     else
     {
          $data = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
     }

     # sanitalize
     $data = $data ? $data : '';
     $search_array = array("#'#", '#""#', "#''#", "#\n#", "#\r\n#");
     $replace_array = array('"', '', '', '\\n', '\\n');
     $data = preg_replace($search_array,  $replace_array, $data);
     $data = ltrim(rtrim($data, '"'), '"');
     $data = $isevaled ? $data : ($data[0] === "'") ? $data : "'" . $data . "'";

$js = <<<JSCODE
\n<script>
// fallback - to deal with IE (or browsers that don't have console)
if (! window.console) console = {};
console.log = console.log || function(name, data){};
// end of fallback

console.log('===== PHP Dump =====');
console.log('$name');
console.log('$type');
console.log($data);
console.log('===== / PHP Dump =====');
console.log('\\n');
</script>
JSCODE;

     echo $js;
} # end logConsole



나는 아무도 가장 쉬운 (아주 예쁜 것은 아니지만) 코드에 대해서는 언급하지 않았다. 읽을 수있는 출력 (색상이나 들여 쓰기 없음)을 얻고 싶다면 다음과 같이 var_dump 주위의 간단한 <pre> 작동합니다 :

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

이것보다 훨씬 낮은 오버 헤드를 얻을 수 없습니다!




Related