PHP'de daha güzel / bilgilendirici bir Var_dump alternatifi? [kapalı]


130

Her düzgün PHP programcısının kullandıkları, sevdikleri ve kısayol tuşlarını atadıkları bir print_rveya var_dumpsarmalayıcıya sahiptir , neden en sevdiklerimizi paylaşmıyoruz ?


39
ben sadece echo '<pre>' kullanıyorum; print_r ($ var); çıkış; kapatmıyorum bile. sanırım terbiyeli değilim
Funky Dude

Bağlantıyı, Kint geliştirmeye devam ettiğim github'a yönlendirecek şekilde düzenledim ve hala sorun yaşıyorsanız, lütfen herhangi bir yolla bana bildirin.
raveren

1
Hey, Kint harika! Günümü kurtardı.
István Ujj-Mészáros

2
Neden bir programın% 100 reklam uyarısı olan bir soru "kendi var_dump () 'ımı kendim yapıyorum" sürümüne ekleniyor? İlk soru, bir ürün reklamına neden soru olarak izin verildiğidir.
m3nda

11
Çünkü soruyu sorduktan sonra aracı bir yıldan fazla bir süre sonra yaptım. Sizi neyin rahatsız ettiğini bilmiyorum, 10k + line olgun bir açık kaynak aracı yarattım ve yıllar sonra sürekli geliştiriyorum. SO'da gelenek olduğu gibi, soruya kendi cevabımı verdim.
2013

Yanıtlar:


71

Bunu sorduktan sonra tam bir yıl ve emek, sonunda var_dump sürümüm olan Kint'i açtım. Bunu proje sayfasında veya doğrudan github'da okuyun .

İşte bir ekran görüntüsü:

Kint

Fiş için üzgünüm :)


DÜZENLEME: Yorum yapanlara bunun bir destek forumu olmadığını hatırlatmak isterim, sorun yaşıyorsanız / bir özellik istiyorsanız, lütfen bir sorun bildirin . Yorum isteyen destek, silinmek üzere işaretlenecektir.


Yazı tipi boyutunu değiştirmek ve CSS kodunu güzelleştirmek zorunda kaldım, ama iyi işti, hoşuma gitti ... uzun zamandır Krumo kullanıcısından geliyor
Quamis

1
ne gibi değişiklikler yaptınız, bunun bir gelişme olduğuna inanıyorsanız, değişiklikleri bana raveren@gmail.com'a gönderebilirsiniz
raveren

Krumo'ya alıştım ve daha küçük yazı tipleri istedim ve ayrıca CSS kodunu da güzelleştirdim. Gerçek bir gelişme
denebilecek

peki fikir, gerçek çıktıya mümkün olduğunca az müdahale etmek için css'nin js ile birlikte sıkıştırılması gerektiğiydi. Elbette, oluşturulan kaynağın oldukça girintilemesi de planlandı, ancak şu anda Kint'e ayıracak vaktim yok ..
raveren

2
Örnek olarak, Kint korumalı ve özel değişkenleri gösterir, eğer bir nesneyi dökerseniz, krumo bunu yapmaz (çünkü sadece eski benim varsaydığım yansıma sınıflarını kullanır). Genel olarak konuşursak, Kint'i üstün buldum; Yine de css'yi daha kullanışlı hale getirmek için ince ayar yapmak zorunda kaldım (bu büyük yazı tipi, tonlarca iç içe geçmiş özelliği atarken çok iyi çalışmıyor). Oh ve arkasındaki kod bir karmaşa değil, Krumo hakkında söylenemeyen bir şey (üzgünüm Krumo yazarı!)
Mahn

45

Tercih ettiğim, Xdebug uzantısı tarafından sağlananvar_dump işlev : sadece uzantıyı yükleyin (hem Windows hem de Linux'ta kolay) ve daha iyi bir çıktı elde edin:var_dump

  • daha iyi biçimlendirme
    • HTML
    • renkler
  • ve ne kadar bilginin görüntülenmesi gerektiğini ayarlama seçenekleriniz var

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

xdebug


Ve elbette, Xdebug, uzaktan hata ayıklama (örneğin, PHP uygulamanızın örneğin Eclipse PDT'de grafiksel hata ayıklaması) , profil oluşturma, ...


1
Bu xdebug biçimlendirme sınıfını paylaşılan bir ana bilgisayarda kullanmam gerekiyor. Kişisel projeme dahil etmenin bir yolu var mı?
Anyul Rivas

1
Sunucunuzun yöneticisi (kök) değilseniz, büyük olasılıkla bir PHP uzantısı kuramazsınız ( PHP uzantılarını yüklemek için bir tane yükleyen bir paylaşılan barındırma hizmeti hiç görmedim) ; yani, hayır, Xdebug'u kullanamazsınız (her neyse, onu bir üretim sunucusuna kurmak genellikle iyi bir fikir değildir: bu bir hata ayıklama uzantısıdır, sonuçta) ; Değişken çıktı veren bir işlevin PHP tabanlı bir uygulamasına geri dönmeniz gerekecek (diğer bazı yanıtlara bakın)
Pascal MARTIN

1
evet, sınıfın bir hata oluştuğunda kendime bazı çıktılar göndermesine ihtiyacım vardı.
Anyul Rivas

34

Kendim yazdım: REF ( demo ):

r () çıktı

Planlar, yalnızca metin oluşturma eklemek ve Kint'in yaptığı gibi girdi ifadesi hakkında bilgi görüntülemektir ...


4
İyi iş, çok güzel bir araç
ssuperczynski

2
REF harika, renkli ve hızlı. Ben her zaman kullanırım.
Marty McGee

2
Harika bir araç, ona yeni geçtim. Teşekkürler!
Andris

Birkaç kişi besteci kullanıyor, şey ... ben değil. Bir oluşturursanız, dllbu "hata ayıklama" yı kullanacağım. Teşekkürler ve iyi iş çıkardınız!
Alex

27

İşte satır içi kullandığım benimki çok kullanışlı:

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

2
Bu işlevi seviyorum - kolay ve net ve çok
kolaydan

Teşekkürler. Ben her zaman kullanırım. Gerçekten PHP'ye yerleşik olmalıdır. İkinci parametreyi kullanarak kendi formatınızı koyabilirsiniz. örneğin echo $ güzel ($ bir_değişken, "-");
Guillermo Phillips

7
Bu , print_r, var_dump ve var_export'un en kötü özelliklerini güzel bir şekilde birleştirir . Hiçbir html kaçışı yok, sadece tek bir parametreyi kabul ediyor, özyinelemede kalıyor, çıktı geri dönmüyor ve üstelik tamamen okunamaz . Bir pislik olmak istemiyorum, ama yorumlar onu çok mükemmel gösteriyor.
raveren

Yorumunuz için teşekkür ederim @Raveren. Daha spesifik olursanız, cevabımı geliştireceğim.
Guillermo Phillips

2
IMO en iyi tek hat çözümü basittir function pretty(){echo'<pre>';foreach(func_get_args()as $arg){ob_start();var_dump($arg);echo htmlentities(ob_get_clean())."\n#####\n#####\n\n";}die;}. Var_dump çok ayrıntılı bir işlevdir, tüm PHP'nin uç durumlarını (LOTS vardır) işler ve okunabilir olmasa bile% 100 kararlıdır. Ancak günün sonunda, uygulamanızın sizin için en iyisi olduğunu düşünüyorsanız, kesinlikle kullanmanız gereken şey budur.
raveren

16

Krumo'yu arıyorsunuz ( Uyarı, Kötü Amaçlı Yazılımlar için Chrome uyarıları ).

Basitçe söylemek gerekirse Krumo, print_r () ve var_dump () yerine geçer. Tanım gereği Krumo, herhangi bir PHP değişkeni hakkında yapılandırılmış bilgileri görüntüleyen bir hata ayıklama aracıdır (başlangıçta PHP4 / PHP5 için, şimdi yalnızca PHP5 için).


Bu harika! Teşekkürler. +1
the_drow

2
denediğimde kırıldı. Bildirdim, ancak yanıt yok ve yeni sürüm yok
Mawg, Monica'nın

2
@Pekka Bağlantı, Chrome'da bir kötü amaçlı yazılım uyarısı veriyor.
Tim Post

Bugün krumo bu adam tarafından güncellendi github.com/mmucklo/krumo (ancak Kint daha iyi olabilir, daha fazla ayrıntı)
lolesque

9

Aşk FirePHP artı kundakçı

  • Günlük bilgilerini başlıkları kullanarak yazar, böylece AJAX'ı bozmaz.
  • Günlüğe kaydettiğiniz değişkenlerin / nesnelerin çok güzel bir grafik gösterimini sunar
  • Her günlük ifadesinin oluştuğu dosya adını ve satır numarasını görüntüleyebilir
  • Prosedürel veya nesne yönelimli API ile projenizde kullanımı kolaydır


8

Bunun için (kısmi) çözümüm basitçe şöyle bir işlev eklemek (Google Chrome kullanarak):

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

Ctrl + Shift + J tuşlarına basın (konsolu açar) ve orada JSON yapısını bulabilirsiniz. Elbette JSON yanıtlarının güzel bir baskısı için daha da kullanışlı.


8

Kullandığım şeyin eksiksiz bir örneği ...

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

Çıktı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

1
\ N \ n \ n \
PHP_EOL olarak

7

İşte benim:

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

Tarz:

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

2
Aslında fena değil. Çıktının bir örneğini göstermiş olsaydınız muhtemelen daha fazla oylanırdı.
Mawg,

@acSlater Benim için çalışıyor, sadece sbwDebuggöndermeyi unuttuğu sınıfı yaratmanız ve fonksiyonu içine koymanız gerekiyor.
Dennis98

6

Kısa bir süre önce var dökümlerimi kitaplık, ön etiket ve her uygulamaya kurulum olmadan güzelleştirmek için ücretsiz bir Chrome uzantısı geliştirdim (devam eden çalışma). Hepsi JavaScript ve regEx ile yapılır. Tek yapmanız gereken uzantıyı yüklemek ve gitmeniz için iyi bir şey. Ben de bir Firefox sürümü üzerinde çalışıyorum. İşte GitHub sayfası. Umarım yakında Chrome ve Firefox web mağazalarında da bulabilirsiniz!

https://github.com/alexnaspo/var_dumpling

İşte bir örnek çıktı:

Örnek çıktı


6
güzel dostum! uzantınızı yeni indirdiniz ve mükemmel çalışıyor! Teşekkürler!
coryj

5
Dostum ... teşekkür ederim. Bir süredir buna benzer bir şey arıyordum
broadbent

1
Unreal. Şimdiye kadarki en iyi seçenek!
Christian

Firefox 15 ile denendi, uyumlu olmadığını söyledi. Bunu atlama şansı var mı?
cyberfly

1
Bu çok güzel, keşke daha önce bulsaydım!


2

Bu süslü kütüphaneler harika ... ek yük hariç. Sonsuz parametreler alan basit, güzel bir var_dump istiyorsanız, işlevimi deneyin. Bazı basit HTML ekler. Veri öznitelikleri de eklenir, HTML5 kullanırsanız, daha düşük sürümler onları yok sayar, ancak öğeyi tarayıcı konsolunda açmayı ve ekranda gördükleriniz yeterli değilse biraz daha fazla bilgi almayı kolaylaştırır.

Düzen çok basit, ek yük yok. Her parametre için, Nesne dökümleri (XML dahil) gibi şeyler gettypeve hatta classadlar dahil olmak üzere bir ton bilgi sağlar . Denendi ve doğru, yıllardır kullanıyorum.

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

Ve Codeigniter kullanıyorsanız, onu da son derece basit bir şekilde CI'nize ekleyin. İlk önce gidin application/config/autoload.phpve açık olduğundan emin olun helper 'string'.

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

Ardından, MY_string_helper.phpin adlı bir dosya oluşturun application/helpersve basitçe işlevi, ifvarlık kontrolü için tipik bir ifadeye ekleyin .

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

| VEYA |, farklı bir yöne gitmek istiyorsanız.

Aşağıdaki kod parçası yukarıdakiyle aynıdır ancak değişkenlerinizi tarayıcı konsolunda gösterecektir. Bu bazen sql nesne çağrılarında ve diğer dizi ve nesne çağrılarında, anahtar adını veya her neyse eksik olduğunuzda hata ayıklamayı kolaylaştırabilir.

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 şeyle ç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...
<-----------------------------------------------------------------------------------------------------------------------> 

1
Bir geliştirme aracında göz ardı edilebilir performans düşüşleri hakkında neden endişelenmek gerekir? Bu işlev, kelimenin tam anlamıyla echo '<pre>';var_dump($var);echo '</pre>';artı sıfır değer katan bir metindir.
raveren

@Raveren evet preDump('value', TRUE, array( 'bob => 'bill' ), (object)array( 'bob => 'bill' )' is quick and easy and gives a nice layout visually in the browser that shows each variable passed in it's own "area" with a type label, thus making debugging quick and easy. And since it's a snippet i keep in my IDE's toolbox, i can recall it with ease on any needed page or while working with any library. But sure, it's just an eko 'pre' hariç ; var_dump`, simple htmlçevresinde 0 değer ekleyen metin değil, bazılarıyla . lol kik. Beğenmediysen, kullanma. Sadece bir öneri.
SpYk3HH

@Raveren Ve bunu beğendiyseniz ... güncellememi gerçekten seveceksiniz: P
SpYk3HH

1

PHP Array Beautifier Bu basit araç, PHP'de print_r () ifadesi gibi bir dizi veya nesne çıktısını alır ve verilerinizi kolayca okumak için renk kodlamasında biçimlendirir. http://phillihp.com/toolz/php-array-beautifier/


var_dump çıktısı ile çalışmaz, tırnak işaretlerini bozar, daha büyük dökümler için son derece kafa karıştırıcı görünür.
raveren

1

Yine bir başka yerli versiyon:

http://github.com/perchten/neat_html

Oldukça esnek olduğunu düşünmeyi seviyorum. Belirli bir çıktı ortamını hedeflemez, ancak çıktının / yazdırmanın veya davranışın neden değiştirileceğini ve bazı kalıcı ayarların neden değiştirileceğini belirtebileceğiniz bir dizi isteğe bağlı argümana sahiptir.




1

PHP'de çok büyük dizilerle uğraşıyorsanız, bu işlev yardımcı olabilir:

function recursive_print ($varname, $varval) {
  if (! is_array($varval)):
    print $varname . ' = ' . var_export($varval, true) . ";<br>\n";
  else:
    print $varname . " = array();<br>\n";
    foreach ($varval as $key => $val):
      recursive_print ($varname . "[" . var_export($key, true) . "]", $val);
    endforeach;
  endif;
}

Temel olarak, her bir öğenin ayrı bir satırda olduğu tüm diziyi döker, bu da belirli öğeler için doğru tam yolları bulmakta faydalıdır.

Örnek çıktı:

$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';

Bakınız: Her anahtar / değer çiftinin ayrı satırda olduğu PHP dizisi nasıl dışa aktarılır?


1

Hiç kimsenin en kolay (çok hoş olmasa da) koddan bahsetmediğine şaşırdım. Sadece okunabilir bir çıktı (renk veya girinti olmadan) elde etmek istiyorsanız , aşağıdaki gibi <pre>bir var_dumpçalışmanın etrafında basit bir :

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

Bundan daha aşağı olamaz!



0

Benim tercih edilir ayıklama gelen https://github.com/hazardland/debug.php olarak adlandırılan tek tek işlevi içeren kütüphane olan hata ayıklama (kütüphanenizle projenizde veya o işlevi kopyalamak sadece olabilir) . Tipik debug () html çıktısı şuna benzer:

görüntü açıklamasını buraya girin

Ancak, verileri aynı işleve sahip düz metin olarak da (4 boşluk girintili sekme ile) bunun gibi çıktılayabilirsiniz (ve hatta gerekirse dosyaya kaydedebilirsiniz):

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"

0

TVarDumper

Bu, buggy PHP işlevinin yerini alması amaçlanan harika bir araçtır var_dumpve print_rkarmaşık bir nesne yapısındaki özyinelemeli olarak referans verilen nesneleri doğru bir şekilde tanımlayabilir. Ayrıca, bazı özel değişkenlerin belirsiz yinelemeli gösterimini önlemek için yinelemeli derinlik kontrolüne sahiptir.

Bkz: TVarDumper.php.


Döngüsel referanslara göre daha fazla avantaj sağlayan var_dumpve print_rdestekleyebilen diğer alternatif çözümler için , lütfen kontrol edin: print_r ve var_dump'ı döngüsel referansla kullanma .


Daha fazla fikir için ayrıca kontrol edin: PHP betiklerinde nasıl hata ayıklayabilirsiniz?


0

Benimki daha basit, benim için altyapıyı değiştirmek için çok fazla bilgim / vaktim yok xdebug, vb.

Ve diğer durumlarda, örneğin basit bir WP web sitesine çok fazla ihtiyacınız yoktur.

Bu yüzden kullanıyorum:

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

bu bana gerçekten çok yardımcı oluyor.

ancak DevConsole Ortamını tercih ettiğim için bu harika ama basit işlevi kullanıyorum:

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

Küçük ayar:

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

0

Başka bir seçenek de

composer require symfony/var-dumper --save-dev

Sonra dosyanızda sadece kullanırsınız dump($var) ve böyle bir çıktı elde edersiniz.görüntü açıklamasını buraya girin


0

Buraya başka bir cevap eklemek zorunda kaldım çünkü diğer çözümlerdeki adımları gerçekten uygulamak istemedim. Son derece basittir ve hiçbir uzantı gerektirmez, içerir vb ve tercih ettiğim şeydir. Çok kolay ve çok hızlı.

İlk önce söz konusu değişkeni json_encode:

echo json_encode($theResult);

Http://jsoneditoronline.org/ adresindeki JSON Düzenleyicisine aldığınız sonucu kopyalayın, sadece sol taraftaki bölmeye kopyalayın , Kopyala> ' yı tıklayın ve JSON'u gerçekten güzel bir ağaç biçiminde yazdırır.

Her biri için, ama umarım bu, bazılarının bir tane daha güzel seçeneği olmasına yardımcı olur! :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.