Sprachreferenz
PHP Manual

Ausnahmebehandlung

Inhaltsverzeichnis

PHP 5 hat ein Exceptionmodell ähnlich dem anderer Programmiersprachen. Eine Exception kann in PHP geworfen (throw) und abgefangen (catch) werden. Um das Fangen potentieller Exceptions zu ermöglichen, sollte der jeweilige Code von einem try-Block umschlossen werden. Jeder try-Block muss mindestens einen zugehörigen catch Block besitzen. Mehrere catch-Blöcke können verwendet werden, um verschiedene Klassen von Exceptions abzufangen. Die normale Programmausführung (wenn keine Exception innerhalb des try-Blockes geworfen wird oder kein zur Klasse der geworfenen Exception passendes catch vorhanden ist) wird nach dem letzten in Folge definierten catch-Block fortgesetzt. Exceptions können innerhalb eines catch-Blockes geworfen (oder weitergeworfen) werden.

Wenn eine Exception geworfen wird, wird der Programmcode hinter der auslösenden Anweisung nicht ausgeführt, und PHP versucht, den ersten passenden catch-Block zu finden. Falls eine Exception nicht abgefangen wird, wird ein fataler Fehler mit einer "Uncaught Exception ..."-Nachricht ausgegeben, wenn nicht eine Behandlung mittels set_exception_handler() definiert wurde.

Hinweis: Interne PHP-Funktionen verwenden in den meisten Fällen Error-Reporting, nur moderne objektorientierte Extensions nutzen Exceptions. Fehler können allerdings einfach mittels ErrorException in eine Exception umgewandelt werden.

Tipp

Die Standard PHP Library bietet eine große Anzahl eingebauter und direkt verwendbarer Exceptions.

Beispiel #1 Eine Exception werfen

<?php
function inverse($x) {
    if (!
$x) {
       throw new 
Exception('Division durch Null.');
    }
    else return 
1/$x;
}

try {
    echo 
inverse(5) . "\n";
    echo 
inverse(0) . "\n";
} catch (
Exception $e) {
    echo 
'Exception abgefangen: ',  $e->getMessage(), "\n";
}

// Ausführung fortsetzen
echo 'Hallo Welt';
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

0.2
Exception abgefangen: Division durch Null
Hallo Welt

Beispiel #2 Verschachtelte Exceptions

<?php

class MyException extends Exception { }

class 
Test {
    public function 
testing() {
        try {
            try {
                throw new 
MyException('foo!');
            } catch (
MyException $e) {
                
/* weiterwerfen der Exception */
                
throw $e;
            }
        } catch (
Exception $e) {
            
var_dump($e->getMessage());
        }
    }
}

$foo = new Test;
$foo->testing();

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(4) "foo!"

Sprachreferenz
PHP Manual