PHP- Ausnahmen
Was ist eine Ausnahme?
Eine Ausnahme ist ein Objekt, das einen Fehler oder ein unerwartetes Verhalten eines PHP-Skripts beschreibt.
Ausnahmen werden von vielen PHP-Funktionen und -Klassen ausgelöst.
Benutzerdefinierte Funktionen und Klassen können auch Ausnahmen auslösen.
Ausnahmen sind eine gute Möglichkeit, eine Funktion zu stoppen, wenn sie auf Daten stößt, die sie nicht verwenden kann.
Auslösen einer Ausnahme
Die throw
Anweisung ermöglicht es einer benutzerdefinierten Funktion oder Methode, eine Ausnahme auszulösen. Wenn eine Ausnahme ausgelöst wird, wird der darauf folgende Code nicht ausgeführt.
Wenn eine Ausnahme nicht abgefangen wird, tritt ein schwerwiegender Fehler mit der Meldung „Uncaught Exception“ auf.
Versuchen wir, eine Ausnahme auszulösen, ohne sie abzufangen:
Beispiel
<?php
function divide($dividend, $divisor) {
if($divisor == 0)
{
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
echo divide(5, 0);
?>
Das Ergebnis wird in etwa so aussehen:
Fatal error: Uncaught Exception: Division by zero in
C:\webfolder\test.php:4
Stack trace: #0 C:\webfolder\test.php(9):
divide(5, 0) #1 {main} thrown in C:\webfolder\test.php on line 4
Die try...catch-Anweisung
Um den Fehler aus dem obigen Beispiel zu vermeiden, können wir die
try...catch
Anweisung verwenden, um Ausnahmen abzufangen und den Prozess fortzusetzen.
Syntax
try {
code that can throw exceptions
} catch(Exception $e) {
code that runs when an exception is caught
}
Beispiel
Eine Nachricht anzeigen, wenn eine Ausnahme ausgelöst wird:
<?php
function divide($dividend, $divisor) {
if($divisor ==
0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo
divide(5, 0);
} catch(Exception $e) {
echo "Unable to divide.";
}
?>
Der catch-Block gibt an, welche Art von Ausnahme abgefangen werden soll, und den Namen der Variablen, die für den Zugriff auf die Ausnahme verwendet werden kann. Im obigen Beispiel ist der Ausnahmetyp Exception
und der Variablenname $e
.
Das try...catch...finally-Statement
Die try...catch...finally
Anweisung kann verwendet werden, um Ausnahmen abzufangen. Code im
finally
Block wird immer ausgeführt, unabhängig davon, ob eine Ausnahme abgefangen wurde. Wenn
finally
vorhanden, ist der catch
Block optional.
Syntax
try {
code that can throw exceptions
} catch(Exception $e) {
code that runs when an exception is caught
} finally {
code that
always runs regardless of whether an exception was caught
}
Beispiel
Zeigen Sie eine Nachricht an, wenn eine Ausnahme ausgelöst wird, und geben Sie dann an, dass der Prozess beendet wurde:
<?php
function divide($dividend, $divisor) {
if($divisor
== 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo
divide(5, 0);
} catch(Exception $e) {
echo "Unable to
divide. ";
} finally {
echo "Process complete.";
}
?>
Beispiel
Gibt einen String aus, auch wenn keine Ausnahme abgefangen wurde:
<?php
function divide($dividend, $divisor) {
if($divisor == 0)
{
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} finally {
echo
"Process complete.";
}
?>
Das Ausnahmeobjekt
Das Ausnahmeobjekt enthält Informationen über den Fehler oder das unerwartete Verhalten, auf das die Funktion gestoßen ist.
Syntax
new Exception(message, code, previous)
Parameterwerte
Parameter | Description |
---|---|
message | Optional. A string describing why the exception was thrown |
code | Optional. An integer that can be used used to easily distinguish this exception from others of the same type |
previous | Optional. If this exception was thrown in a catch block of another exception, it is recommended to pass that exception into this parameter |
Methoden
Beim Abfangen einer Ausnahme zeigt die folgende Tabelle einige der Methoden, die zum Abrufen von Informationen über die Ausnahme verwendet werden können:
Method | Description |
---|---|
getMessage() | Returns a string describing why the exception was thrown |
getPrevious() | If this exception was triggered by another one, this method returns the previous exception. If not, then it returns null |
getCode() | Returns the exception code |
getFile() | Returns the full path of the file in which the exception was thrown |
getLine() | Returns the line number of the line of code which threw the exception |
Beispiel
Informationen über eine ausgelöste Ausnahme ausgeben:
<?php
function divide($dividend, $divisor) {
if($divisor == 0)
{
throw new Exception("Division by zero", 1);
}
return $dividend / $divisor;
}
try {
echo
divide(5, 0);
} catch(Exception $ex) {
$code = $ex->getCode();
$message = $ex->getMessage();
$file = $ex->getFile();
$line = $ex->getLine();
echo "Exception thrown in $file on line
$line: [Code $code]
$message";
}
?>
Vollständige Ausnahmereferenz
Eine vollständige Referenz finden Sie in unserer Complete PHP Exception Reference .
Die Referenz enthält Beschreibungen und Beispiele aller Exception-Methoden.