phpBuddy

Code-Schnipsel

Jeder Programmierer sammelt im Laufe der Jahre Dutzende nützliche Funktionen, Klassen und sonstige Snipets. Hier gibt es einige nützliche Goodies, die jeder frei in seine eigenen Projekte einbauen kann.
Reinschauen lohnt sich!

Sie sind hier: Startseite Fehlerbehandlung
Fehlermeldungen und Fehlerbehandlung - Exceptions
Beitragsseiten
Fehlermeldungen und Fehlerbehandlung
Error Reporting
Display Errors
Fehler protokollieren
Eigene Fehlerbehandlung
Exceptions
Fazit und Download
Alle Seiten

Exceptions / Ausnahmebehandlung

Exceptions, auf Deutsch Ausnahmen, wurden mit PHP 5 eingeführt und stellen im Prizip das Non Plus Ultra dar, was das Abfangen und Verarbeiten von Fehlern betrifft.
Eins vorneweg: Exceptions ist ein Werkzeug für Fortgeschrittene bis Profis und für Anfänger ziemlich ungeeignet. Der Grund liegt darin, dass Exceptions hervorragendes Verständnis von Programmabläufen und OOP voraussetzen.

Dennoch möchte ich ein kurzes Beispiel geben, wie man Exception in der Praxis anwendet und wie diese arbeiten. Zunächst der Code, dann die Erklärung:

try
{
    if (copy( 'quelldatei.txt', 'zieldatei.txt' ) === FALSE)
    {
        // Fehler wird geworfen, wenn die Datei nicht kopiert werden konnte
        throw new Exception( 'Die Datei konnte nicht kopiert werden!' );
    }
}
catch (Exception $error)
{
    echo $error->getMessage();
    // Eventuell weitere Aktionen zur Fehlerbehandlung
}

Dies ist ein stark vereinfachtes Beispiel einer Exception. Diese besteht aus zwei Teilen:
1. Der try-Block, in dem Code ausgeführt wird in dem ein Fehler erwartet werden kann
2. Der catch-Block, der einen geworfenen Fehler fängt und ggfs. Alternativen Code ausführt.

Voraussetzung ist einmal mehr die deaktivierte Fehlerausgabe von PHP, damit wir uns selbst um Fehler kümmern können. Im try-Block führen wir also Code aus, der einen Fehler verursachen könnte, der die weitere Verarbeitung des Scripts beeinträchtigen kann, z.B. herstellen einer Datenbankverbindung. Schlägt der Verbindungsaufbau fehl, brauchen wir auch nicht zu versuchen Daten aus der DB auszulesen und ebenso brauchen wir kein Template laden, durch das wir die Daten aus der DB ausgeben wollten.
Statt dessen, also im Fall eines Fehlers im try-Block, wird ein Fehler geworfen (throw) unter Angabe der zuständigen Fehlerklasse, in unserem Beispiel ist das die PHP-interne Standardklasse Exception. Als Parameter wird die Fehlermeldung und optional der Fehlercode übergeben. Letzteres ist z.B. sinnvoll einsetzbar, um den MySQL-internen Fehlercode an die Ausnahmebehandlung zu übergeben, damit dort dem Fehler entsprechende Meldungen ausgegeben werden können.
Wird ein Fehler mit throw geworfen, bricht die Scriptausführung augenblicklich ab und es wird der nächste catch-Block angesprungen, der den Fehler bearbeitet. Im Prinzip entspricht das dem Verhalten eines Fatal Error mit dem Unterschied, dass wir bei Exceptions noch Code ausführen können (Meldungen ausgeben, auf Fehlerseiten umleiten, Logeinträge schreiben, usw.) - und genau das macht Exceptions so flexibel einsetzbar. Der Einsatz von try/catch Blöcken lohnt sich also nur, wenn man mit Fehler vom Typ Warning und/oder Error rechnen kann, da ein manuell ausgelöster Scriptabbruch bei einer Notice nicht gerechtfertigt wäre.

Als Erklärung belasse ich es dabei, da das Thema zu komplex ist, als das ich hier in die Tiefe gehen könnte. Weitere Beispiele für den praktischen Einsatz von Exception finden sich in diversen Klassen von mir, wie etwa in der Datenbank-Klasse vom Gästebuch oder auch in der FTP Klasse.


Fazit für Exceptions

Wer programmiertechnisch schon so weit ist, dass er OOP beherrscht und Exceptions versteht, für den gibt es meistens nichts besseres als Fehlerbehandlung. Besonders in Verbindung mit den weiter oben vorgestellten Möglichkeiten bekommt man von PHP ein sehr mächtiges und flexibles Werkzeug in die Hand, mit dem man bei auftretenden Fehlern reagieren kann, seine Site-Besucher nicht im Dunkeln stehen lässt und Angreifern den Zugang zu Informationen erheblich erschwert.
Für alle Programmierer die noch nicht so weit sind Exceptions einzusetzen, sind die anderen vorgestellten Techniken absolut ausreichend um seine Webseite vor allzu neugierigen Augen zu schützen.