PHP daha güzel / bilgilendirici var_dump alternatif?

14 Cevap php

Her iyi programcı bir print_r veya var_dump kullandıkları sarıcı, sevgi ve kısayol tuşları atamak için, neden biz share our favourite ones. Vardır


EDIT:

Bu soran sonra zaman ve emek tam bir yıl, ben kendi özelliği zengin var_dump() and print_r() alternative: Kint opensourced ettik, ve o zamandan beri genişleyen edilmiştir.

İçerik-farkında özelliklerini gösteren ekran görüntüsü:

Kint screenshot

Fikirler ve konular çok açıktır ve en kısa zamanda hayata geçirilecektir.

14 Cevap

Sonunda var_dump, Kint benim sürümünü dışarıdan ettik. the project page bu konuda okumak, ya da doğrudan in github.

Burada mevcut üç tema gösteren biraz modası geçmiş bir ekran görüntüsü:

kint themes

Fiş için özür dilerim :)


EDIT: Ben sadece sorunları yaşıyorsanız eğer / bir özellik istiyorum, bu bir destek forumu olmadığını, Yorumcuların hatırlatmak, lütfen file an issue istiyorum. Yorum isteyen desteği silinmek üzere işaretlenir.

Sadece uzantısı (easy, both on windows and Linux) yüklemek ve var_dump daha iyi bir çıkış olur: Benim üzerinde tercih var_dump function, as provided by the Xdebug extension olduğunu:

  • better formating
    • HTML
    • bayrak
  • ve görüntülenmesi gereken ne kadar bilgiler ayarlamak için seçeneğiniz vardır

Ve hızlı bir ekran görüntüsü:

xdebug


And, of course, Xdebug brings loads of other usefull stuff, like remote debugging (i.e. graphical debugging of your PHP application, in Eclipse PDT for instance), profiling, ...

Ben yazdım benim kendi: REF (demo):

r() çıktısı

Planları sadece metin oluşturma ekleyebilir ve Kint yaptığı gibi giriş ifadesi hakkında bilgi görüntülemek için vardır ...

Aradığınız Krumo (Warning, Chrome alerts for Malware).

Basitçe söylemek gerekirse, Krumo bir print_r için yedek () ve var_dump () 'dir. Tanım olarak Krumo herhangi bir PHP değişkeni hakkında yapılandırılmış bilgileri görüntüler (şimdi sadece PHP5 için başlangıçta PHP4/PHP5 için,) bir hata ayıklama aracıdır.

Burada inline, çok yararlı kullanmak benimdir:

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

Seviyorum Firephp artı firebug

  • It writes the logging information out using headers, so it doesn't break AJAX.
  • Gives you a very nice graphical representation of the variables/objects you log
  • Her bir günlük deyim oluşur dosya adı ve satır numarası görüntüleyebilirsiniz
  • Ya, projenizde kullanmak için kolay bir usul veya nesne-yönelimli API ile

Ben Coldfusion'un müthiş cfdump etiketi öykünür dBug kullanarak oldum:

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

İşte benim:

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

: Ile Trend

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

Geçenlerde benim var hayır kütüphaneler, hiçbir ön etiketleri ve her uygulama için kurulum dökümlerini güzelleştirmek için ücretsiz bir krom uzantısı (work in progress) geliştirdi. Tüm JavaScript ve regex ile yapılır. Yapmanız gereken tüm uzantısı ve gitmek için iyi yüklemektir. Ben de bir Firefox sürümü üzerinde çalışıyorum. İşte GitHub sayfasıdır. Yakında krom firefox webstores üzerinde kullanılabilir olması için umut!

https://github.com/alexnaspo/var_dumpling

İşte bir örnek çıktı:

Example çıktısı

Bunun için benim (kısmi) çözümü basitçe (Google Chrome'u kullanarak) bu gibi bir işlevi eklemektir:

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

Ctrl + Shift + J (konsolu açılır), ve orada JSON yapısını bulabilirsiniz. Hatta daha yararlı tabii JSON tepkilerin oldukça baskı için.

Ben Krumo benzer küçük sınıf yazdım, ama app embed çok daha kolay.

İşte link: https://github.com/langpavel/PhpSkelet/blob/master/Classes/Debug.php

Ve burada örnek çıktı: http://langpavel.php5.cz/debug_sample.html

İşte bu sorunu çözen bir krom uzantısıdır. Bu çöken sağlar çünkü var_dumpling için tercih.

https://chrome.google.com/webstore/detail/varmasterpiece/chfhddogiigmfpkcmgfpolalagdcamkl

Ben kullanmak ne tam bir örnek ...

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

Çıkışlar ...

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

Bu fantezi kütüphaneler yükü dışında ... harika. Eğer sonsuz parametreleri alır basit, oldukça var_dump istiyorsanız, benim işlevini deneyin. Bazı basit HTML ekler. Veri özelliklerinin Eğer HTML5 kullanırsanız, alt sürümleri sadece onları görmezden de ekledi, ancak bu kolay tarayıcı konsolda bir öğe açmak ve ne ekranda görmek yeterli değilse biraz daha bilgi almak için yapar vardır.

Düzen, hiçbir yükü çok basittir. gettype gibi şeyler ve (XML dahil) Nesne bile class adı dökümlerini de dahil olmak üzere her bir parametre için bilgi bir ton sağlar. Bu denenmiş ve gerçek, ben yıllardır bunu kullanıyorum oluyor.

function preDump() {    //  use string "noEcho" to just get a string return only
    $args = func_get_args();
    $doEcho = TRUE; $sb;
    if ($args) {
        $sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;padding:0em 3em 1em 1em;"><legend><b>preDump: '.count($args).' Parameters Found.</b></legend>';
        foreach (func_get_args() as $arg) {
            if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(preDump: )[0-9]+/', 'preDump: '.(count($args)-1), $sb); continue; }
            $sb .= '<pre data-type="'.gettype($arg).'"';
            switch (gettype($arg)) {
                case "boolean":
                case "integer":
                    $sb .= ' data-dump="json_encode"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
                    $sb .= json_encode($arg);
                    break;
                case "string":
                    $sb .= ' data-dump="echo"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
                    $sb .= $arg;
                    break;
                default:
                    $sb .= ' data-dump="var_dump"';
                    if (is_object($arg)) $sb .= 'data-class="'.get_class($arg).'"';
                    $sb .= '><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')';
                    if (is_object($arg)) $sb .= ' ['.get_class($arg).']';
                    $sb .= '</b></p><p>';
                    ob_start();
                    var_dump($arg);
                    $sb .= ob_get_clean();
                    if (ob_get_length()) ob_end_clean();
            }
            $sb .= '</p></pre>';
        }
        $sb .= '</fieldset></div>';
    }
    else {
        $sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;"><legend><b>preDump: [ERROR]</b></legend><h3>No Parameters Found</h3></fieldset></div>';
    }
    if ($doEcho) echo($sb);
    return $sb;
}

Eğer CodeIgniter kullanırsanız, son derece SADECE sizin de CI ekleyin. İlk olarak, application/config/autoload.php gidin ve emin helper 'string' üzerinde olduğundan emin olun.

$autoload['helper'] = array( 'string' ); 

Sonra sadece MY_string_helper.php in application/helpers ve basit insert varlığı kontrol için tipik bir if açıklamada fonksiyonu adlı bir dosya oluşturmak gitmek.

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
    if (!function_exists('preDump')) {
        function preDump() {
            ...
        }
    }
//  DON'T CLOSE PHP

| VEYA |, bunu farklı bir yöne çekmek istiyorum.

Tarayıcı konsolunda değişkenleri gösterecektir dışında Aşağıdaki kod parçasında, yukarıdaki aynıdır. Bu bazen daha kolay sql nesne aramaları ve diğer bir dizi hata ayıklama ve anahtar adını falan kaçırıyorsun aramaları nesne yapabilirsiniz.

function consoleDump() {    //  use string "noEcho" to just get a string return only
    $args = func_get_args();
    $doEcho = TRUE; $sb;
    if ($args) {
        $sb = '<script type="text/javascript">console.log("<" + new Array('.(count($args) < 10 ? '49': '48').').join("-") + "[consoleDump: '.count($args).' items]" + new Array(50).join("-") + ">"); console.log([';

        foreach (func_get_args() as $i => $arg) {
            if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(consoleDump: )[0-9]+/', 'consoleDump: '.(count($args)-1), $sb); continue; }
            $sb .= '{ "type": "'.gettype($arg).'", ';
            switch (gettype($arg)) {
                case "boolean":
                case "integer":
                case "string":
                    $sb .= '"value": '.json_encode($arg);
                    break;
                default:
                    $sb .= '"value": '.json_encode($arg);
                    if (is_object($arg) || is_array($arg)) $sb .= ', "count": '.json_encode(count((array)$arg));
                    if (is_object($arg)) $sb .= ', "objectClass": "'.get_class($arg).'"';
            }
            $sb .= '}';
            if ($i < count($args)-1) $sb .= ', ';
        }
        $sb .= ']); console.log("<" + new Array(120).join("-") + ">"); </script>';
    }
    else {
        $sb = '<script type="text/javascript">console.log("<" + new Array(120).join("-") + ">");console.log("consoleDump: [ERROR] No Parameters Found");console.log("<" + new Array(120).join("-") + ">");</script>';
    }
    if ($doEcho) echo($sb);
    return $sb;
}

Her şeyi ile çalışır!

consoleDump($simpXMLvar, $_SESSION, TRUE, NULL, array( 'one' => 'bob', 'two' => 'bill' ), (object)array( 'one' => 'bob', 'two' => 'bill' ));


<------------------------------------------------[consoleDump: 6 items]------------------------------------------------->
[Object, Object, Object, Object, Object, Object] 
// This drops down to show your variables in JS objects, like:
    0: Object
        count: 4
        objectClass: "SimpleXMLElement"
        type: "object"
        value: Object
        __proto__: Object
        // ...etc...
<----------------------------------------------------------------------------------------------------------------------->