Teil 2: Firebug-Erweiterung FirePHP für Firefox: Fehler in der Anwendungslogik finden
- Firebug-Erweiterung FirePHP für Firefox: Fehler in der Anwendungslogik finden
- Teil 2: Firebug-Erweiterung FirePHP für Firefox: Fehler in der Anwendungslogik finden
Als Erstes ist es wichtig, die FirePHP-Ausgabe ein- und abschaltbar zu machen. Sie ist per Voreinstellung eingeschaltet und sollte zum Beispiel per Konstante in der Konfiguration abgeschaltet werden können. Dieser Schritt ist wichtig, damit PHP in der Produktiv-Umgebung nicht aus dem Nähkästche...
Als Erstes ist es wichtig, die FirePHP-Ausgabe ein- und abschaltbar zu machen. Sie ist per Voreinstellung eingeschaltet und sollte zum Beispiel per Konstante in der Konfiguration abgeschaltet werden können.
Dieser Schritt ist wichtig, damit PHP in der Produktiv-Umgebung nicht aus dem Nähkästchen plaudert und die interne Funktionsweise oder gar die Zugangsdaten zur Datenbank einem Fremden offenbart. Dies geschieht durch die Verwendung der Funktion setEnabled. Für FirePHP-Objekte heißt es
$firephp->setEnabled(false);
bei Verwendung statischer Methoden
FB::setEnabled(false);
Die Methoden heißen gleich und nehmen die gleichen Parameter entgegen.
$p1 = new Person(1);
$p1->sagHallo();
$p1->trinkeWein("Merlot", 100);
$p1->lagereWein("Merlot", 60);
echo $p1->weinVorrat("Merlot");
Es interessiert uns, warum die Bestände ins Minus rutschen können. Dies erreichen wir, indem wir schon in der ersten Zeile der Funktion trinkeWein ausgeben lassen, wer wie viel aus dem Lager anfordert. Dazu nutzen wir die FirePHP-Funktion log:
FB::log($this->name . " will " .
$menge . " Flashen ". $wein. " trinken. Besitzt davon: " . $this->weine[$wein]);
Es wird protokolliert, was und unter welchen Umständen geschieht. Wenn Sie so etwas wie "Nero will 100 Flashen Merlot trinken. Besitzt davon: " sehen, sehen Sie möglicherweise richtig. Vielleicht hat Nero niemals Merlot besessen? Wenn Sie von außerhalb der Klasse nachsehen wollen, was Nero einlagern ließ, werden Sie einen Fehler bekommen. weine ist private und somit von Außen nicht lesbar. Mit
FB::info($this->weine, $this->name .
"'s Weinlager");
innerhalb derselben Funktion werden Sie erfolgreicher: "Nero's Weinsortiment: array(...". Wenn Sie es anklicken, erscheint die in PHP übliche print_r- beziehungsweise var_dump-Darstellung des übergebenen Objektes.
Die Funktionen log, info, warn und error nehmen als erstes Argument das auszugebende Objekt und optional eine Beschreibung. Die Funktionen unterscheiden sich nur in der grafischen Darstellung. Da der Mensch dazu neigt, vor lauter Bäumen den Wald nicht mehr zu sehen, sollte man das zusammenfassen, was zusammen gehört.Mit FB::group('Gruppenname'); leiten Sie eine im Browser zusammenklappbare Gruppe von Debug-Nachrichten ein und fassen sie unter einem frei wählbaren Namen zusammen. Mit FB::groupEnd(); schließen und beenden Sie diese.

Tabelle statt Array-Dump
Schöner als ein Array-Dump ist natürlich eine Tabelle. Auch dies ist mit FirePHP möglich. Die Funktion table erwartet - anders als sonst - zunächst einen Tabellennamen, dann die Daten in Form eines speziell formatierten Arrays.
Dieses Array enthält als erstes Element ein Array, der Spaltennamen enthält. In unserem Beispiel wird etwas Arbeit nötig, um die Daten so aufzubereiten:
$a = array();
$a[] = array('Sorte', 'Menge');
foreach($this->weine as
$sorte => $menge) {
$a[] = array($sorte, $menge);
}
FB::table($this->name . "'s
Weinlager", $a);
Spätestens hier fällt auf: Nero hat selbst keinen Merlot. Seinem Wunsch nach 100 Flaschen dieses Weines sollte auf jeden Fall eine Prüfung des Bestandes vorausgehen. In größeren Projekten wird das Problem natürlich komplexer und unüberschaubarer sein.
Durch den Einsatz von Klassen kann manchmal das Zustandekommen eines Methodenaufrufes einem Rätsel gleichen. Hier hilft FB::trace('Beschreibung');. Es fasst in einer Tabelle alle Informationen der Rückverfolgung zusammen. Durch die Nutzung der Funktionen registerErrorHandler und registerAssertionHandler wird FirePHP angewiesen, Fehler (Exceptions) und Zuweisungs-Probleme zu handhaben.
Mit FB::dump($variable); schicken Sie eine beliebige Variable zu einer genaueren Untersuchung an den Browser. Diese finden Sie nicht in Konsole sondern im Reiter Netzwerk unter Details der HTTP-Anfrage im Bereich Server. FirePHP ist der Helfer, den sich ein PHP-Programmierer wünschen kann, um oft übersehenen Fehlern zu begegnen.
Das Wissen um gute oder sichere PHP-Programmierung kann es jedoch nicht ersetzen. Denken Sie zum Beispiel an den Konstruktor unserer Klasse, der die übergebene ID nicht weiter untersucht, sondern vielleicht ungeschützt ins SQL einbindet.
Mit dem Grundwissen um den Einsatz von FirePHP finden Sie einen Einstieg in eine entspannte Art der Programmierung und der unvermeidbaren Fehlersuche. An dieser Stelle sollte der Vollständigkeit halber auf FirePHP-Headquarters () verwiesen werden, wo Sie weitere Informationen zur Funktionsweise und zu möglichen Konfigurationsoptionen erhalten können.