Das Diagnostizieren von Fehler beim Programmieren von WordPress Plugins & Themes in PHP sieht bei mir meistens wie folgt aus:
// ...
echo '<code>';
print_r($meine_variable_in_der_ich_einen_fehler_vermute);
echo '</code>';
exit;
// oder
echo '<pre>';
var_dump($meine_variable_in_der_ich_einen_fehler_vermute);
echo '</pre>';
die;
Code-Sprache: PHP (php)
Nicht besonders elegant, aber so sieht meistens die Praxis in PHP aus. Selbst in der offiziellen PHP Dokumentation gibt es keine sinnvollen Vorschläge, wie man in PHP sauber Fehler diagnostizieren kann.
Der richtige Weg: Xdebug
Sicherlich ist Xdebug das beste Werkzeug um Fehler im PHP Code zu suchen. Es hält die Ausführung von PHP an und man kann sich alle aktuell initialisierten Variablen genau anschauen.
Allerdings stehe ich mit Xdebug absolut auf Kriegsfuß. Die Installation ist leider alles andere als einfach. Ich brauche meistens 1-2 Stunden um Xdebug auf meinen Mac zum Laufen zu bekommen. Dann bin ich aber meistens so genervt, dass ich Feierabend mache und Xdebug einige Tage in Ruhe lasse. Brauche ich es dann ein paar Tage später wieder, ist schon wieder irgendetwas kaputt, z.B. Xdebug hält die Ausführung nicht an, obwohl ich einen Breakpoint gesetzt habe. In anderen Dateien funktioniert es aber ohne Probleme ?.
Statt wieder 1-2 Stunden in das Debuggen des Debuggers zu investieren, spring ich dann wieder auf die alt bewährte Methode print_r
…, die immer funktioniert.
dd
& dump
Aus der Laravel-Welt (wobei diese auf einem Synfony Component basieren) sind mir die zwei kleine Hilfsfunktionen dd
& dump
bekannt, die im Prinzip das gleich wie print_r
bzw. var_dump
machen, aber viel kürzer zu schreiben sind und die Ausgabe hübsch machen.
dump
gibt einfach eine oder mehrere Variable aus:
dump($value);
dump($value1, $value2, $value3, ...);
Code-Sprache: PHP (php)
dd
ist eine Abkürzung für dump & die und gibt eine oder mehrere Variablen aus und beendet anschließend die Ausführung:
dd($value);
dd($value1, $value2, $value3, ...);
Code-Sprache: PHP (php)
In WordPress nutzen
Kann man das nicht auch in WordPress nutzen? Natürlich und es gibt sogar schon ein passendes Plugin: Laravel DD for WordPress
Einfach in der Entwicklungsumgebung installieren & aktivieren und fröhlich dd
& dump
schreiben!
Nicht vergessen solltet ihr aber alle dd
& dump
’s vor dem Push in die Live-Seite wieder zu entfernen (ist mir auch schon passiert). Sonst gibt es sicherlich wieder ein paar nette Fehler zu debuggen.
Next Level: Ray
Noch ein Schritt weiter geht die kostenpflichtige App Ray (29€/Jahr, kann aber kostenlos getestet werden) für MacOS. Statt dump($value)
schreibt man ray($value)
und die Ausgabe erfolgt direkt schön aufbereitet in der Ray App statt im Browser.
Um Ray in WordPress nutzen zu können, müsst ihr neben der Ray App in eurer Entwicklungsumgebung das Ray WordPress Plugin installieren. Anschließend kann das debuggen beginnen.
Einen guten Eindruck vermittelt das folgende kurze Video:
Ray wurde von Spatie, einer belgischen Agentur spezialisiert auf Laravel, entwickelt. Spatie ist in der Laravel Community dafür bekannt sehr viele Open Source Laravel Packages zu pflegen. Zunehmend entstehen aber auch größere jedoch kostenpflichtige Produkte wie Ray oder Mailcoach (Newsletter-Versand). Sowohl die Packages als auch die Produkte haben eine außergewöhnlich hohe Codequalität und werden bei neuen Laravel-Releases innerhalb weniger Tagen geupdated. Alleine deswegen kann man hier die 29€ pro Jahr (kein Abo nur eine jährliche Lizenz) getrost investieren.
Laravel Tools für WordPress
Dieser Beitrag ist Teil meiner kleinen Serie Laravel Tools für WordPress, wo ich euch Tools vorstelle, die ich aus der Laravel-Welt kenne, aber auch problemlos für WordPress genutzt werden können.
Dein Blog gefällt mir ziemlich gut ?
Hallo Johannes,
ich hab mich die Tage noch mal mit Xdebug auseinandergesetzt. Seit kurzem gibt es da nämlich die Version 3, die macht es meiner Meinung nach da ein wenig einfacher als bisher. Die ganze Installation habe ich hier mal als Gist hinterlegt:
https://gist.github.com/mahype/a9301dbb084204206ec94380998d7c6e
Das ist eigentlich sehr einfach und bei mir hat es Systemübergreifend gut geklappt das zu installieren.
Hey Sven,
danke, schaue ich mir mal an! Einfacher klingt auf jeden Fall besser. Ich hoffe es funktioniert dann auch in VSCode. Da hat es bisher bei mir immer am meisten gehapert.