Bardziej ładna / pouczająca alternatywa Var_dump w PHP? [Zamknięte]

131

Każdy przyzwoity programista PHP ma print_rlub var_dumpwrapper, którego używa, kocha i przypisuje klawisze skrótów, dlaczego nie udostępnimy naszych ulubionych .

Raveren
źródło
39
po prostu używam echo '<pre>'; print_r ($ var); exit; nawet go nie zamykam. chyba nie jestem przyzwoity
Funky Dude
Edytowałem link, aby wskazywał na github, gdzie kontynuuję rozwój Kinta, a jeśli nadal masz z nim jakieś problemy, daj mi znać w jakikolwiek sposób.
raveren
1
Hej, Kint jest spoko! To właśnie uratowało mi dzień.
István Ujj-Mészáros
2
Dlaczego pytanie, które jest w 100% reklamą programu, jest umieszczane w wersji „tworzę własną var_dump ()”? Pierwszym pytaniem byłoby, dlaczego reklama produktu jest dozwolona jako pytanie.
m3nda
11
Ponieważ stworzyłem narzędzie ponad rok później po zadaniu pytania. Nie wiem, co cię dręczy, stworzyłem dojrzałe narzędzie open source o ponad 10 000 linii i po latach stale je ulepszam. Odpowiedzi udzieliłem na to pytanie - zgodnie z tradycją w SO.
raveren

Odpowiedzi:

71

Cały rok czasu i pracy po tym, jak o to zapytałem, w końcu otworzyłem moją wersję var_dump, Kint. Przeczytaj o tym na stronie projektu lub bezpośrednio na githubie .

Oto zrzut ekranu:

kint

Przepraszam za wtyczkę :)


EDYCJA: Chciałbym tylko przypomnieć komentującym, że to nie jest forum pomocy technicznej, jeśli masz problemy / chcesz skorzystać z funkcji, zgłoś problem . Pomoc prosząca o komentarze zostanie oznaczona do usunięcia.

raveren
źródło
musiałem zmienić rozmiar czcionki i upiększyć kod CSS, ale fajna robota, podoba mi się ... pochodząca od długoletniego użytkownika
Krumo
1
jakie zmiany wprowadziłeś, jeśli uważasz, że to poprawa, możesz przesłać mi zmiany na [email protected]
raveren
Byłem przyzwyczajony do Krumo i chciałem mniejszych czcionek, a także upiększyłem kod CSS. Nic, co można by nazwać rzeczywistą poprawą, bardziej jak stary nawyk :)
Quamis
Pomysł polegał na tym, że css ma być kompresowane razem z js, aby jak najmniej ingerować w rzeczywisty wynik. Oczywiście zaplanowano też ładne wcięcie generowanego źródła, ale obecnie nie mam czasu poświęcić
Kintowi
2
Na przykład Kint pokazuje chronione i prywatne zmienne, jeśli zrzucisz obiekt, a krumo nie (ponieważ zakładam, że tylko pierwsza używa klas odbicia). Ogólnie rzecz biorąc uważam, że Kint jest lepszy; chociaż musiałem też poprawić css, aby był bardziej użyteczny (ta ogromna czcionka nie działa zbyt dobrze, gdy zrzucam mnóstwo zagnieżdżonych właściwości). Aha, a kod za tym nie jest bałaganem, czego nie można powiedzieć o Krumo (przepraszam autora Krumo!)
Mahn
44

My wolelibyśmy na to var_dumpfunkcja, jak przewiduje rozszerzenie Xdebug : wystarczy zainstalować rozszerzenie (łatwy, zarówno na Windows i Linux) , a var_dumpstaje się lepsze wyjście:

  • lepsze formatowanie
    • HTML
    • zabarwienie
  • i masz opcje, aby ustawić, ile informacji powinno być wyświetlanych

I szybki zrzut ekranu:

xdebug


I, oczywiście, Xdebug oferuje mnóstwo innych przydatnych rzeczy, takich jak zdalne debugowanie (tj. Graficzne debugowanie aplikacji PHP, na przykład w Eclipse PDT) , profilowanie, ...

Pascal MARTIN
źródło
1
Muszę użyć tej klasy formatowania xdebug na udostępnionym hoście. Czy jest jakiś sposób, aby włączyć to do mojego osobistego projektu?
Anyul Rivas
1
Jeśli nie jesteś administratorem (rootem) swojego serwera, najprawdopodobniej nie będziesz w stanie zainstalować rozszerzenia PHP (nigdy nie widziałem wspólnej usługi hostingowej, która instalowałaby takie rozszerzenie PHP) ; więc nie, nie będziesz mógł używać Xdebug (w każdym razie, instalacja go na serwerze produkcyjnym nie jest generalnie dobrym pomysłem: w końcu jest to rozszerzenie debugujące) ; będziesz musiał wrócić do opartej na PHP implementacji funkcji wyświetlającej zmienne (zobacz inne odpowiedzi)
Pascal MARTIN
1
tak, potrzebowałem tylko, aby klasa wysłała mi jakieś dane wyjściowe, gdy wystąpi błąd.
Anyul Rivas
34

Napisałem własne: REF ( demo ):

r () wyjście

W planach jest dodanie renderowania tylko tekstu i wyświetlanie informacji o wyrażeniu wejściowym, tak jak robi to Kint ...

niezły tyłek
źródło
4
Dobra robota, bardzo fajne narzędzie
ssuperczynski
2
REF jest niesamowity, kolorowy, szybki. Używam go cały czas.
Marty McGee
2
Świetne narzędzie, właśnie się na nie przełączyłem. Dzięki!
Andris
Kilka osób używa kompozytora, no cóż ... nie ja. Jeśli utworzysz plik dll, użyję tego "debugowania". Dzięki i niezła robota!
Alex,
27

Oto moje, którego używam w tekście, bardzo przydatne:

$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);
Guillermo Phillips
źródło
2
Uwielbiam tę funkcję - łatwa i przejrzysta, a wspomniałem bardzo łatwo :)
derekdreery
Dzięki. Używam go cały czas. Powinien być naprawdę wbudowany w PHP. Możesz wprowadzić własne formatowanie, używając drugiego parametru. np. echo $ ładne ($ jakaś_zmienna, "-");
Guillermo Phillips,
7
To pięknie łączy wszystkie najgorsze funkcje z print_r, var_dump i var_export. Brak ucieczki HTML, akceptuje tylko jeden parametr, zawiesza się przy rekurencji, nie może zwracać danych wyjściowych, a na dodatek jest całkowicie nieczytelny . Nie chcę być dupkiem, ale komentarze sprawiają, że wydaje mi się to idealne.
raveren
Dziękuję za komentarz @Raveren. Jeśli mógłbyś być bardziej szczegółowy, poprawię swoją odpowiedź.
Guillermo Phillips
2
IMO najlepszym rozwiązaniem pojedynczej linii jest po prostu 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 jest bardzo rozwlekłą funkcją, obsługuje wszystkie skrajne przypadki PHP (których jest DUŻO) i jest w 100% stabilny, nawet jeśli nie jest tak czytelny. Ale pod koniec dnia, jeśli uznasz, że Twoja implementacja jest dla Ciebie najlepsza, zdecydowanie powinieneś jej użyć.
raveren
16

Szukasz Krumo ( ostrzeżenie, alerty Chrome dotyczące złośliwego oprogramowania ).

Mówiąc prościej, Krumo jest zamiennikiem print_r () i var_dump (). Z definicji Krumo jest narzędziem do debugowania (początkowo dla PHP4 / PHP5, teraz tylko dla PHP5), które wyświetla uporządkowane informacje o każdej zmiennej PHP.

Pekka
źródło
To jest genialne! Dzięki. +1
the_drow
2
kiedy próbowałem, był zepsuty. Zgłosiłem to, ale bez odpowiedzi i bez nowej wersji
Mawg mówi, że przywróć Monikę
2
@Pekka Link generuje ostrzeżenie o złośliwym oprogramowaniu w przeglądarce Chrome.
Tim Post
Dzisiaj krumo zostało zaktualizowane przez tego gościa github.com/mmucklo/krumo (ale Kint może być lepszy, więcej szczegółów)
lolesque
9

Kocham Firephp Plus Firebug

  • Zapisuje informacje o logowaniu przy użyciu nagłówków, więc nie psuje AJAX.
  • Daje bardzo ładną graficzną reprezentację rejestrowanych zmiennych / obiektów
  • Może wyświetlać nazwę pliku i numer wiersza, w którym występuje każda instrukcja dziennika
  • Łatwy w użyciu w projekcie dzięki proceduralnemu lub obiektowemu interfejsowi API
Johrn
źródło
8

Używałem programu dBug, który emuluje niesamowity cfdumptag Coldfusion :

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

jClark
źródło
Eleganckie rozwiązanie dla wszystkich programistów coldfusion, takich jak ja
jeśli tak się stanie,
8

Moim (częściowym) rozwiązaniem tego jest po prostu dodanie takiej funkcji (przy użyciu przeglądarki Google Chrome):

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

Naciśnij Ctrl + Shift + J (otwiera konsolę), a znajdziesz tam strukturę JSON. Jeszcze bardziej przydatne w przypadku ładnego wydruku odpowiedzi JSON oczywiście.

Tim
źródło
8

Kompletny przykład tego, czego używam ...

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

Wyjścia ...

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
Anthony Scaife
źródło
1
Zmieniłem \ n na PHP_EOL i działa to ładnie, gdy używam php z CMD okna
iewebguy
7

Tu jest moje:

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

W stylu:

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;
}
Damon
źródło
2
Właściwie nieźle. Prawdopodobnie zostałby bardziej oceniony, gdybyś pokazał przykład wyniku.
Mawg mówi, że przywróć Monikę
@acSlater Działa dla mnie, wystarczy utworzyć sbwDebugklasę, którą zapomniał opublikować i umieścić w niej funkcję.
Dennis98,
6

Niedawno opracowałem bezpłatne rozszerzenie do Chrome (w toku), aby upiększyć moje zrzuty var bez bibliotek, bez tagów wstępnych i bez instalacji do każdej aplikacji. Wszystko zrobione za pomocą JavaScript i regEx. Wszystko, co musisz zrobić, to zainstalować rozszerzenie i gotowe. Pracuję również nad wersją przeglądarki Firefox. Oto strona GitHub. Mam nadzieję, że wkrótce będzie dostępny w sklepach Chrome i Firefox!

https://github.com/alexnaspo/var_dumpling

Oto przykładowe dane wyjściowe:

Przykładowe dane wyjściowe

Alex Naspo
źródło
6
miły koleś! właśnie pobrałem Twoje rozszerzenie i działa idealnie! Dzięki!
coryj
5
Koleś ... dziękuję. Szukałem czegoś takiego od jakiegoś czasu
broadbent
1
Nierealny. Najlepsza opcja!
Christian
Próbowałem z Firefox 15, powiedział, że nie jest kompatybilny. Jest jakaś szansa, aby to ominąć?
cyberfly
1
To jest piękne, szkoda, że ​​nie znalazłem go wcześniej!
3

Tracy ma piękne wyjście składanego za pomocą dump () funkcji .

bez ryzyka
źródło
2

Te wymyślne biblioteki są świetne ... z wyjątkiem kosztów ogólnych. Jeśli potrzebujesz prostego, ładnego var_dump, który przyjmuje nieskończone parametry, wypróbuj moją funkcję. Dodaje prosty kod HTML. Dodawane są również atrybuty danych, jeśli używasz HTML5, niższe wersje po prostu je zignorują, ale ułatwiają otwarcie elementu w konsoli przeglądarki i uzyskanie trochę więcej informacji, jeśli to, co widzisz na ekranie, nie wystarczy.

Układ jest bardzo prosty, bez kosztów. Zawiera mnóstwo informacji dla każdego parametru, w tym takie rzeczy, jak, gettypea nawet classnazwa zrzutów obiektów (w tym XML). To wypróbowane i prawdziwe, używam go od lat.

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

A jeśli używasz Codeigniter, dodaj go też do swojego CI BARDZO PROSTO. Najpierw przejdź do application/config/autoload.phpi upewnij się, że helper 'string'jest włączony.

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

Następnie po prostu utwórz plik o nazwie wi MY_string_helper.phppo application/helpersprostu wstaw funkcję w typowej ifinstrukcji w celu sprawdzenia istnienia.

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

| LUB |, jeśli chcesz pójść w innym kierunku.

Poniższy fragment kodu jest taki sam jak powyżej, z tą różnicą, że pokaże Twoje zmienne w konsoli przeglądarki. Czasami może to ułatwić debugowanie wywołań obiektów sql oraz innych wywołań tablic i obiektów, w których brakuje nazwy klucza lub czegokolwiek.

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

Działa ze wszystkim!

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...
<-----------------------------------------------------------------------------------------------------------------------> 
SpYk3HH
źródło
1
Dlaczego należy się martwić o pomijalne spadki wydajności narzędzia programistycznego? Ta funkcja dosłownie echo '<pre>';var_dump($var);echo '</pre>';dodaje tekst dodający wartość zerową.
raveren
@Raveren yea z wyjątkiem 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 echo 'pre'; var_dump` z niektórymi simple htmlwokół niego, a nie tekstem dodającym wartość 0. lol kik. Jeśli ci się to nie podoba, nie używaj tego. Tylko sugestia.
SpYk3HH
@Raveren A jeśli ci się podobało ... naprawdę pokochasz moją aktualizację: P
SpYk3HH
1

PHP Array Beautifier To proste narzędzie pobiera tablicę lub obiekt wyjściowy w PHP, taki jak instrukcja print_r () i formatuje ją w kodowaniu kolorami, aby łatwo odczytać dane. http://phillihp.com/toolz/php-array-beautifier/

Ganbolor Buddorj
źródło
nie działa z wyjściem var_dump, łamie cudzysłowy, przy większych zrzutach wygląda bardzo myląco.
raveren
1

Jeszcze inna wersja domowej roboty:

http://github.com/perchten/neat_html

Lubię myśleć, że jest dość elastyczny. Nie jest przeznaczony dla określonego środowiska wyjściowego, ale ma kilka opcjonalnych argumentów, które możesz określić, dlaczego zmienić wyjście / wydruk lub zachowanie, a także niektóre trwałe ustawienia.

Alastair Brayne
źródło
1

Jeśli masz do czynienia z bardzo dużymi tablicami w PHP, ta funkcja może pomóc:

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

Zasadniczo zrzuca całą tablicę, w której każdy element znajduje się w osobnym wierszu, co jest korzystne przy znajdowaniu właściwych pełnych ścieżek dla niektórych elementów.

Przykładowe dane wyjściowe:

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

Zobacz: Jak wyeksportować tablicę PHP, w której każda para klucz-wartość znajduje się w osobnym wierszu?

kenorb
źródło
1

Dziwię się, że nikt nie wspomniał o najłatwiejszym (choć niezbyt ładnym) kodzie. Jeśli chcesz tylko uzyskać czytelny wynik (bez kolorów lub wcięć), prosty <pre>element wokół var_dumpdziała, jak w:

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

Nie można zejść dużo niżej niż to!

Sablefoste
źródło
0

Preferuję debugowanie z https://github.com/hazardland/debug.php, który jest biblioteką zawierającą tylko jedną funkcję o nazwie debug (możesz po prostu skopiować tę funkcję w swoim projekcie lub w swojej bibliotece) . Typowy wynik debug () html wygląda następująco:

wprowadź opis obrazu tutaj

Ale możesz wyprowadzać dane jako zwykły tekst z tą samą funkcją (z 4 wcięciami spacjami) w ten sposób (a nawet w razie potrzeby zaloguj się do pliku):

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"
ZAGROŻENIE BIOLOGICZNE
źródło
0

TVarDumper

Jest to świetne narzędzie, które ma na celu zastąpienie błędnej funkcji PHP var_dumpi print_rponieważ może poprawnie identyfikować obiekty, do których istnieją odniesienia rekurencyjne w złożonej strukturze obiektów. Posiada również rekurencyjną kontrolę głębokości, aby uniknąć nieokreślonego rekurencyjnego wyświetlania niektórych osobliwych zmiennych.

Zobacz: TVarDumper.php.


Dla innych alternatywnych rozwiązań, które zapewnia większą przewagę nad var_dumpi print_roraz mogą wspierać referencje okrężne, proszę sprawdzić: Korzystanie print_r i var_dump z okrągłym odniesienia .


Aby uzyskać więcej pomysłów, zobacz także: Jak debugować skrypty PHP?

kenorb
źródło
0

Mój jest prostszy, dla mnie nie mam zbyt dużej wiedzy / czasu na zmianę infrastruktury zainstalować xdebug itp. Itd.

A w innych przypadkach nie potrzebujesz wiele na przykład do prostej witryny WP

Więc używam:

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

to naprawdę bardzo mi pomogło.

ale ponieważ wolę środowisko DevConsole, używam tej niesamowitej, ale prostej funkcji:

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

Drobne poprawki:

<?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
Locke
źródło
0

Inną opcją jest

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

Następnie w swoim pliku po prostu używasz, dump($var) a otrzymasz takie wyjściewprowadź opis obrazu tutaj

GardenRouteGold
źródło
0

Musiałem tutaj dodać kolejną odpowiedź, ponieważ tak naprawdę nie chciałem przechodzić przez kroki w innych rozwiązaniach. Jest niezwykle prosty i nie wymaga żadnych rozszerzeń, zawiera itp. I jest tym, co wolę. Jest to bardzo łatwe i bardzo szybkie.

Najpierw po prostu json_encode odpowiednią zmienną:

echo json_encode($theResult);

Skopiuj otrzymany wynik do edytora JSON pod adresem http://jsoneditoronline.org/, po prostu skopiuj go do lewego panelu bocznego, kliknij Kopiuj> i ładnie drukuje JSON w naprawdę ładnym formacie drzewa.

Dla każdego z nich, ale miejmy nadzieję, że pomoże to niektórym innym mieć jeszcze jedną fajną opcję! :)

zpert
źródło