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 .


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.


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 raveren@gmail.com
— 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, ...


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


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

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.


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


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.


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

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

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


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!


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

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

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.




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?


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!



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"

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?


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

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


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ę! :)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.