PHP Try Catch: Definition eigener Exceptions

Mittels Class werden im letzten Beispiel eine selbstdefinierte Exception-Klasse von der in PHP vordefinierten abgeleitet. Darüber hinaus wird eine Klasse implementiert, die den Anfang zu einer Klasse zur Verarbeitung von Brüchen darstellt – lediglich der Construktor zu Initialisierung und eine Methode zur automatischen String-Konvertierung wird hier umgesetzt. Weiter unten werden die zuvor implementierten Klassen instanziiert und entsprechend genutzt. Dabei werden Beispielhaft einige Brüche initialisiert, die mit gültigen – aber auch mit ungültigen Werten – gefüttert werden. Um Auftretende Fehler abzufangen werden die Konstruktoren innerhalb eines Try-Catch-Abschnitts verarbeitet.

<?php
    // Konstante für die Fehlernummer (Error-Code)
    // Ist Hilfreich, wenn die Exception innerhalb des PHP-Code identifiziert werden muss
    define (DIV_ERROR, 1);

    // Individuelle Exception durch Ableitung der vordefinierten Klasse implementieren
    class DivisionDurchNullException extends Exception {
        // Default-Constructor mit Vorgaben zur Fehlermeldung und zum Fehlercode
        // Werden bei der Instanzierung der Exception keine Parameter angegeben,
        // so sind diese Werte bereits vorgegeben.
        public function __construct ($message = 'Division durch Null!', $code = DIV_ERROR) {
            parent :: __construct ($message, $code);
        }
    }

    // Als Beispiel dient folgender Ansatz zur Definition einer Klasse zum Verarbeiten von Brüchen
    class bruch {
        // Variablen (Eigenschaften) zur Speicherung von Zähler und Nenner
        private $zaehler;
        private $nenner;

        // Der Constructor der Klasse Bruch initialisiert eine Instanz
        public function __construct ($zaehler, $nenner = 1) {
            // Schon bei der Initialisierung des Bruchs kann der Fehler auftreten
            // Aus diesem Grunde muss eine Exception geworfen werden, wenn der
            // Parameter zur Angabe des Nenners den Wert 0 enthält.
            if ($nenner == 0)
                // Werfen der Exception mit eine individuellen Fehlermeldung
                // Der Fehlercode wird mit dem Default-Wert belegt.
                throw new DivisionDurchNullException ('Nenner ist Null!');
            // Wenn alles in Ordung ist, können Zähler und Nenner den Variablen
            // der Instanz zugewiesen werden.
            $this->zaehler = $zaehler;
            $this->nenner = $nenner;
        }

        // Methode zur Konvertierung des Bruchs in ein String
        // Wird zur Ausgabe benötigt und automatisch aufgerufen, wenn die
        // Instanz mit echo ausgegeben wird.
        public function __toString () {
            return $this->zaehler . ' / ' . $this->nenner;
        }
    }

    // Exception-Block zum Abfangen von Fehlern bei der Initialisierung von
    // Instanzen der Klasse bruch.
    try {
        // Durch Default-Parameter 5/1 ist OK!
        $f = new bruch (5);
        echo $f . '<br>';
        // Auch 1/2 ist gültig
        $f = new bruch (1, 2);
        echo $f . '<br>';
        // Ohne den Try-Catch-Block wäre hier Schluß und das Script
        // würde mit einem Fehler abgebrochen
        $f = new bruch (1, 0);
        // Aufgrund der Exception wird die folgende Ausgabe nicht erreicht.
        // Statt dessen wird das Script in den Catch-Block eintreten und nach
        // diesem Block mit den darauf folgenden Anweisungen fortfahren.
        echo $f . '<br>';
    } catch (DivisionDurchNullException $e) {
        // Exception ist aufgetreten und eine entsprechende Fehlermeldung
        // samt Trace-String wird ausgegeben.
        echo 'Fehler: ' . $e->getMessage () . '<br>' . $e->getTraceAsString ();
    }
?>

5 / 1
1 / 2
Fehler: Nenner ist Null!
#0 /srv/www/htdocs/_PHPTEST.php(188): bruch->__construct(1, 0)

Letzte Posts aus unserem Forum

Webentwickler Konferenz in Hamburg

Hallo Zusammen, Am 20./21. Mai findet in Hamburg die erste Developer Conference 2011 statt. Wie der Name bereits verrät, handelt die Konferenz rund ... » mehr

von devcon-hamburg am Dienstag, 12. April 2011 16:50 in PHP - noch nicht beantwortet

bedingte Weiterleitung in Kontaktformularen

Hallo zusammen, ich habe ein kleines Problem: Ich brauche bei der Entwicklung eines Kontaktformulares für eine Website eine bedingte Weiterleitung ... » mehr

von scatha am Donnerstag, 10. März 2011 01:12 in PHP - noch nicht beantwortet

Gesucht: Auslesen einer externen Website

Mein vorhaben ist recht simpel aber ich bin php noob (hoffe das entschuldigt es nen bissl xD) und hab kp wie ichs anfangen soll. Und zwar möchte ich ... » mehr

von HeathenMan am Dienstag, 1. Februar 2011 22:57 in PHP - bisher 1 Antwort
Letzter Beitrag: Donnerstag, 3. Februar 2011 14:43 von alm

Hallo, am einfachsten und kompaktesten kann man das mit einem regulären Ausdruck machen. Einfach mal nach der Funktion preg_match_all suchen und den ... » mehr

Zeilenumbruch in der Bildergalerie-Beschriftung

Hallo, die Bildergalerie mit php und js ist super, jedoch möchte ich gern zu meinen Bildern verschiedene Bemerkungen machen und zwar untereinander, ... » mehr

von Sylma am Mittwoch, 26. Januar 2011 01:13 in PHP - bisher 1 Antwort
Letzter Beitrag: Freitag, 28. Januar 2011 10:16 von alm

Hallo, ich nehme an, dass \n im Beschreibungstext nicht funktioniert aber versuchen kann man es. Ansonsten: Schon mal mit einer UTF-Sequenz ... » mehr

Bildergalerie mehrfach einbinden

Hallo alle miteinander, ich hoffe, dass mit hier jemand helfen kann. Ich habe mir hier von der Seite die Bildergalerie mit JS und PHP ... » mehr

von Saga am Dienstag, 28. Dezember 2010 09:57 in PHP - bisher 6 Antworten
Letzter Beitrag: Mittwoch, 29. Dezember 2010 20:50 von Saga

Hallo Alex, die Warnung ist zwar jetzt durch das isset weg, aber die Daten werden immer noch nicht übergeben. (Nachdem ich durch das isset die ... » mehr

¬ Tutorials



¬ Insolvenzrecht