Open Source Software Tools und Tipps

PHP Debugging mit Kint

Seit einigen Wochen verwende ich privat als auch beruflich die PHP Klasse Kint von raveren (github). Grundlegend ersetzt die Klasse die PHP Funktionen print_r()var_dump() und debug_backtrace(). Zusätzlich bietet Kint noch ein paar nette Features an und zeigt die Ausgabe gestylt.

So lässt sich das Debugging direkt in den Code implementieren, ohne Ausgaben zu erzeugen. Über die Methode Kint::enabled(false) lässt sich das Debugging global an- und ausschalten. Wird Kint::trace() oder Kint::dump(1) aufgerufen, wird ein detaillierter Stacktrace angezeigt.

Kint installieren

Die debugging Klasse kann über drei verschiedene Wege installiert werden. Der komfortabelste Weg ist über Composer. Alternativ gibt es noch git clone und der manuelle Download.

composer

composer require raveren/kint

git

git clone https://github.com/raveren/kint.git

Manuell herunterladen

github.com/raveren/kint/archive/master.zip

Kint anwenden

Mit nur wenigen Zeilen Code lässt sich Kint einbinden und anwenden.

Beispiel Code:

<?php

# Mit composer
include "vendor/autoload.php";

# oder Manuell per include
# include 'kint/Kint.class.php';

// De-/Aktivieren
Kint::enabled( true );

// _SESSION debuggen
Kint::dump( $_SESSION );

// Array debuggen
Kint::dump( [ 'Github', 'stackoverflow', 'Codepen' ] );

// Stacktrace aufrufen
Kint::trace(); // Über die Kurzfunktion: s(1);

// Stacktrace ausgeben
Kint::trace();

Short Functions

Zusätzlich gibt es noch sogenannte short functions (Kurzfunktionen). So lässt sich mit d() ganz einfach Kint::dump() aufrufen. Über ddd() wird Kint::dump() + exit; ausgeführt. Heißt nach der Ausgabe wird das Programm direkt beendet.

Da die normale Ansicht mit HTML und JavaScript vollgepackt ist und nicht auf der Console oder in der Browser Developer Bar funktioniert, gibt es noch die Funktion s(). Diese gibt die Debugging Ausgabe in einer Consolen freundlichen Ansicht aus. Im Browser lässt sich die Funktionen meiner Meinung nach auch besser benutzen, da die Ausgabe mit Kint::dump() mit eigenem Styling und JavaScript Tabs verpackt ist.

Fancy shit!

Der Entwickler von Kint hat mitgedacht und verschiedene Optionen mit eingebaut. So wird über ein Minus (-) vor dem Aufruf ein ob_end_clean() ausgeführt, um die Ausgabe zu erzwingen. Durch ein Plus (+) wird die Ausgabe „DEPTH TOO GREAT“ ignoriert und übersprungen. Bei riesigen Datenmengen ist das Plus mit Vorsicht zu genießen! Mittels dem @-Zeichen wird die Ausgabe zurück (return) und nicht ausgegeben (echo/print). Die normale HTML Debugging Ansicht ist im Standard eingeklappt. Das Ausrufezeichen (!) vor dem Funktionsaufruf zeigt die Ausgabe ausgeklappt an.

Zur Verständlichkeit noch mal eine kleine Übersicht:

// Ausgabe Ausklappen
!Kint::dump( $_SESSION );

// Wert zurückgeben
$debuggingData = @Kint::dump( $_SESSION );

// "DEEP TO GREAT" ignorieren
+Kint::dump( $_SESSION );

// ob_end_clean() ausführen
-Kint::dump( $_SESSION );

Diese Magie kann auch bei den Kurzfunktionen angewendet werden. Diese coolen Features sind keine Funktionen von PHP. Ich habe den Code unter die Lupe genommen und kann auflösen: Vor dem Kint Aufruf wird die aufgerufene Datei temporär weg gespeichert und nach den genannten Sonderzeichen vor der eingebauten Funktionen durchsucht.

Insgesamt ist Kint ein ziemlich abgefahrenes Werkzeug. Jeder der noch Probleme beim debugging hat, sollte sich die Klasse mal ansehen. Dadurch spart ihr die ein oder andere Minute, Stunde, Woche(?) an Fehlersuche.