PHP 5 fügt ein Ausnahmebehandlungsmodul hinzu, das anderen Sprachen ähnelt. Im PHP-Code generierte Ausnahmen können durch Throw-Anweisungen ausgelöst und durch Catch-Anweisungen abgefangen werden. Code, der eine Ausnahmebehandlung erfordert, muss in einem Try-Codeblock platziert werden, um mögliche Ausnahmen abzufangen. Jeder Versuch muss mindestens einen entsprechenden Fang haben. Verwenden Sie mehrere Catches, um von verschiedenen Klassen generierte Ausnahmen abzufangen. Wenn der Try-Codeblock keine Ausnahme mehr auslöst oder kein Catch gefunden wird, der mit der ausgelösten Ausnahme übereinstimmt, setzt der PHP-Code die Ausführung fort, nachdem er zum letzten Catch gesprungen ist. Natürlich erlaubt PHP, innerhalb von Catch-Blöcken erneut Ausnahmen auszulösen.
Wenn eine Ausnahme ausgelöst wird, wird der nachfolgende Code (Anmerkung des Übersetzers: bezieht sich auf den Codeblock, wenn die Ausnahme ausgelöst wird) nicht weiter ausgeführt und PHP versucht, den ersten Code zu finden, der mit der Übereinstimmung übereinstimmen kann fangen. Wenn eine Ausnahme nicht abgefangen wird und keine Notwendigkeit besteht, set_Exception_handler() für die entsprechende Verarbeitung zu verwenden, generiert PHP einen schwerwiegenden Fehler und gibt eine Eingabeaufforderungsmeldung „Uncaught Exception...“ (nicht abgefangene Ausnahme) aus.
Beachten Sie, dass interne HP-Funktionen hauptsächlich Fehlerberichte verwenden, nur moderne objektorientierte Erweiterungen verwenden Ausnahmen. Aber Fehler können durch ErrorException leicht in Ausnahmen umgewandelt werden.
Die PHP Standard Library (SPL) bietet viele integrierte Ausnahmeklassen.
Beispiel #1 löst eine Ausnahme aus
<?php function inverse($x) { if (!$x) { throw new Exception('Division by zero.'); } else return 1/$x; } try { echo inverse(5) . "\n"; echo inverse(0) . "\n"; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } // Continue execution echo 'Hello World'; ?>
Die obige Routine gibt Folgendes aus:
0,2
Abgefangene Ausnahme: Division durch Null.
Hallo Welt
Beispiel #2 Verschachtelte Ausnahme
<?php class MyException extends Exception { } class Test { public function testing() { try { try { throw new MyException('foo!'); } catch (MyException $e) { /* rethrow it */ throw $e; } } catch (Exception $e) { var_dump($e->getMessage()); } } } $foo = new Test; $foo->testing(); ?>
Die obige Routine gibt Folgendes aus:
string(4) "foo!"