PHP Try Catch-Beispiel: Tutorial zur Ausnahme- und Fehlerbehandlung
Was ist eine Ausnahme?
Ein Fehler ist ein unerwartetes Programmergebnis, das vom Programm selbst nicht verarbeitet werden kann.
Fehler werden durch die Korrektur des Programms behoben. Ein Beispiel fรผr einen Fehler wรคre eine Endlosschleife, deren Ausfรผhrung nie aufhรถrt.
Eine Ausnahme ist ein unerwartetes Programmergebnis, das vom Programm selbst verarbeitet werden kann.
Beispiele fรผr Ausnahmen sind der Versuch, eine nicht vorhandene Datei zu รถffnen.
Diese Ausnahme kann entweder dadurch behoben werden, dass die Datei erstellt wird, oder indem dem Benutzer die Mรถglichkeit geboten wird, nach der Datei zu suchen.
Warum mit Ausnahmen umgehen?
- Vermeiden Sie unerwartete Ergebnisse auf unseren Seiten, die fรผr unsere Endbenutzer sehr รคrgerlich oder irritierend sein kรถnnen
- Verbessern Sie die Sicherheit unserer Anwendungen, indem Sie keine Informationen preisgeben, die bรถswillige Benutzer zum Angriff auf unsere Anwendungen verwenden kรถnnten
- PHP-Ausnahmen werden verwendet, um den normalen Ablauf eines Programms zu รคndern, wenn ein vorhersehbarer Fehler auftritt.
PHP-Fehlerbehandlung
Wenn ein Fehler auftritt, abhรคngig von Ihren Konfigurationseinstellungen, PHP zeigt die Fehlermeldung im Webbrowser mit Informationen zum aufgetretenen Fehler an.
PHP bietet eine Reihe von Mรถglichkeiten zur Fehlerbehandlung.
Wir werden uns drei (3) hรคufig verwendete Methoden ansehen;
- Die Aussagenโ Die Die-Funktion vereint die Echo- und Exit-Funktion in einem. Dies ist sehr nรผtzlich, wenn wir eine Nachricht ausgeben und die Skriptausfรผhrung stoppen mรถchten, wenn ein Fehler auftritt.
- Benutzerdefinierte Fehlerhandler โ Dies sind benutzerdefinierte Funktionen, die immer dann aufgerufen werden, wenn ein Fehler auftritt.
- PHP-Fehlermeldung โ die Fehlermeldung hรคngt von Ihren PHP-Fehlerberichterstattungseinstellungen ab. Diese Methode ist in Entwicklungsumgebungen sehr nรผtzlich, wenn Sie keine Ahnung haben, was den Fehler verursacht hat. Die angezeigten Informationen kรถnnen Ihnen beim Debuggen Ihrer Anwendung helfen.
Beispiele fรผr die Fehlerbehandlung
Schauen wir uns nun einige einfache Beispiele mit Fehlerbehandlungsroutinen an.
Nehmen wir an, wir haben eine Anwendung entwickelt, die Textdateien zum Speichern von Daten verwendet. Mรถglicherweise mรถchten wir die Existenz der Datei รผberprรผfen, bevor wir versuchen, Daten daraus zu lesen.
Der folgende Code implementiert das obige Beispiel.
<?php $denominator = 0; echo 2 / $denominator; ?>
Angenommen, Sie haben die Datei simple_error.php im Ordner phptuts gespeichert, รถffnen Sie die URL http://localhost/phptuts/simple_error.php
Sie erhalten folgende Ergebnisse
Wie Sie den obigen Ergebnissen entnehmen kรถnnen, wirkt unsere Anwendung dadurch unprofessionell und kann fรผr den Benutzer lรคstig sein.
Wir werden den obigen Code รคndern und einen Fehlerhandler fรผr die Anwendung schreiben
<?php
$denominator = 0;
if ($denominator != 0) {
echo 2 / $denominator;
} else {
echo "cannot divide by zero (0)";
}
?>
Angenommen, Sie haben den obigen Code als error_handling.php gespeichert, รถffnen Sie die URL http://localhost/phptuts/error_handling.php
Hinweis: Aus Sicherheitsgrรผnden empfiehlt es sich, eine Meldung wie die oben gezeigte anzuzeigen, anstatt eine Meldung wie โDatei nicht gefundenโ anzuzeigen.
Schauen wir uns ein weiteres Beispiel an, das einen benutzerdefinierten Fehlerhandler verwendet.
Der benutzerdefinierte Fehlerhandler wird als standardmรครige PHP-Fehlerbehandlungsfunktion festgelegt und zeigt grundsรคtzlich eine Fehlernummer und eine Fehlermeldung an.
Der folgende Code veranschaulicht die Implementierung des obigen Beispiels
<?php
function my_error_handler($error_no, $error_msg)
{
echo "Opps, something went wrong:";
echo "Error number: [$error_no]";
echo "Error Description: [$error_msg]";
}
set_error_handler("my_error_handler");
echo (5 / 0);
?>
รffnen Sie den Microsoft Store auf Ihrem Windows-PC URL http://localhost/phptuts/custom_error_handler.php Sie erhalten die folgenden Ergebnisse
Wie Sie dem obigen Beispiel entnehmen kรถnnen, sind benutzerdefinierte Fehlerhandler in diesem Sinne leistungsstark
- Sie ermรถglichen uns, die Fehlermeldungen anzupassen.
- Der benutzerdefinierte Fehlerhandler kann auch die Fehlerprotokollierung in einer Datei/Datenbank, das Senden einer E-Mail an den Entwickler usw. umfassen.
Schauen wir uns nun die dritte Art der Fehlerbehandlung an. Wir verwenden die in PHP integrierte Funktion error_reporting. Sie hat die folgende grundlegende Syntax
<?php error_reporting($reporting_level); ?>
HIER,
- โerror_reportingโ ist die PHP-Fehlerberichtsfunktion
- โ$reporting_levelโ ist optional und kann zum Festlegen der Berichtsebene verwendet werden. Wenn keine Berichtsebene angegeben wurde, verwendet PHP die standardmรครige Fehlerberichtsebene, wie in der Datei php.ini angegeben.
| Berichtsebene | Beschreibung | Beispiel |
|---|---|---|
| E_WARNUNG | Zeigt nur Warnmeldungen an. Stoppt die Ausfรผhrung des Skripts nicht | error_reporting(E_WARNING); |
| E_NOTICE | Zeigt Hinweise an, die wรคhrend der normalen Ausfรผhrung eines Programms auftreten kรถnnen oder ein Fehler sein kรถnnten. | error_reporting(E_ NOTICE); |
| E_USER_ERROR | Zeigt vom Benutzer generierte Fehler an, z. B. einen benutzerdefinierten Fehlerhandler | error_reporting(E_ USER_ERROR); |
| E_USER_WARNUNG | Zeigt vom Benutzer generierte Warnmeldungen an | error_reporting(E_USER_WARNING); |
| E_USER_NOTICE | Zeigt vom Benutzer erstellte Benachrichtigungen an | error_reporting(E_USER_NOTICE); |
| E_RECOVERABLE_ERROR | Zeigt Fehler an, die nicht schwerwiegend sind und mit benutzerdefinierten Fehlerhandlern behandelt werden kรถnnen | error_reporting(E_RECOVERABLE_ERROR); |
| E_ALL | Zeigt alle Fehler und Warnungen an | error_reporting(E_ALL); |
Unterschied zwischen Fehlern und Ausnahmen
- Ausnahmen werden ausgelรถst und sollen abgefangen werden, wรคhrend Fehler im Allgemeinen nicht behebbar sind.
- Ausnahmen werden objektorientiert behandelt. Dies bedeutet, dass beim Auslรถsen einer Ausnahme ein Ausnahmeobjekt erstellt wird, das die Ausnahmedetails enthรคlt.
Die folgende Tabelle zeigt die Ausnahmeobjektmethoden
| Methodik | Beschreibung | Beispiel |
|---|---|---|
| getMessage () | Zeigt die Meldung der Ausnahme an |
<?php echo $e->getMessage(); ?> |
| bekommenCode() | Zeigt den numerischen Code an, der die Ausnahme darstellt |
<?php echo $e->getCode(); ?> |
| eine Datei bekommen() | Zeigt den Dateinamen und den Pfad an, in dem die Ausnahme aufgetreten ist |
<?php echo $e->getFile(); ?> |
| getLine() | Zeigt die Zeilennummer an, in der die Ausnahme aufgetreten ist |
<?php echo $e->getLine(); ?> |
| bekommenTrace() | Zeigt eine Anordnung der Rรผckseite antrace vor der Ausnahme |
<?php print_r( $e->getTrace()); ?> |
| getPrevious() | Zeigt die vorherige Ausnahme vor der aktuellen an |
<?php echo $e->getPrevious(); ?> |
| bekommenTraceAsString() | Zeigt die Rรผckseitetrace der Ausnahme als Zeichenkette anstatt als Array |
<?php echo $e->getTraceAsString(); ?> |
| __toString() | Zeigt die gesamte Ausnahme als Zeichenfolge an |
<?php echo $e->__toString(); ?> |
Unten finden Sie die grundlegende Syntax zum Auslรถsen einer Ausnahme.
<?php
throw new Exception("This is an exception example");
?>
HIER,
- โthrowโ ist das Schlรผsselwort, mit dem die Ausnahme ausgelรถst wird
- โnew Exception(โฆ)โ erstellt ein Ausnahmeobjekt und รผbergibt die Zeichenfolge โDies ist ein Ausnahmebeispielโ als Nachrichtenparameter.
Der obige Code gibt die folgende Meldung aus.
Wir schauen uns nun ein Beispiel an, das die Throw- und Catch-Ausnahmen implementiert.
Wir werden das obige Beispiel modifizieren und Try, Throw und Catch einbeziehen.
Es hat die folgende grundlegende Syntax.
<?php
try {
//code goes here that could potentially throw an exception
}
catch (Exception $e) {
//exception handling code goes here
}
?>
HIER,
- โtry{โฆ}โ ist der auszufรผhrende Codeblock, der mรถglicherweise eine Ausnahme auslรถsen kรถnnte
- โcatch(Exception $e){โฆ}โ ist der Codeblock, der die ausgelรถste Ausnahme abfรคngt und das Ausnahmeobjekt der Variablen $e zuweist.
Der folgende Code zeigt das grundlegende Ausnahmebeispiel mit der implementierten Try-, Throw- und Catch-Ausnahme.
Das Programm lรถst absichtlich eine Ausnahme aus, die es dann abfรคngt.
<?php
try {
$var_msg = "This is an exception example";
throw new Exception($var_msg);
}
catch (Exception $e) {
echo "Message: " . $e->getMessage();
echo "";
echo "getCode(): " . $e->getCode();
echo "";
echo "__toString(): " . $e->__toString();
}
?>
รffnen Sie den Microsoft Store auf Ihrem Windows-PC URL http://localhost/phptuts/exception_handling.php Sie erhalten die folgenden Ergebnisse.
Abhรคngig von der Art der ausgelรถsten Ausnahme ist es auch mรถglich, mehrere Ausnahmen fรผr eine PHP-Try-Anweisung zu erstellen.
Siehe den Artikel am MySQL, PHP-Datenzugriffโฆ fรผr Implementierungsbeispiele mehrerer Ausnahmen
Mehrere Ausnahmen
Mehrere Ausnahmen verwenden mehrere Try-Catch-Blรถcke, um die ausgelรถsten Ausnahmen zu behandeln. Mehrere Ausnahmen sind nรผtzlich, wenn:
- Sie mรถchten abhรคngig von der ausgelรถsten Ausnahme eine angepasste Meldung anzeigen
- Sie mรถchten eine eindeutige Operation abhรคngig von der ausgelรถsten Ausnahme ausfรผhren
Das folgende Flussdiagramm veranschaulicht die Funktionsweise mehrerer Ausnahmen
Schauen wir uns ein Beispiel an, das mehrere Ausnahmen verwendet.
Wir werden den Code รคndern, der eine Zahl durch den รผbergebenen Nenner dividiert.
Wir erwarten, dass zwei Arten von Ausnahmen auftreten;
- Durch Null teilen
- Division durch eine negative Zahl
Der Einfachheit halber werden wir in unseren Catch-Blรถcken nur den Ausnahmetyp anzeigen.
Die in PHP integrierte Exception-Klasse wird zum Auslรถsen von Ausnahmen verwendet.
Wir werden zwei Klassen erstellen, die die Ausnahmeklasse erweitern und sie zum Auslรถsen von Ausnahmen verwenden.
Der folgende Code zeigt die Implementierung.
<?php
class DivideByZeroException extends Exception {};
class DivideByNegativeException extends Exception {};
function process($denominator)
{
try
{
if ($denominator == 0)
{
throw new DivideByZeroException();
}
else if ($denominator < 0)
{
throw new DivideByNegativeException();
}
else
{
echo 25 / $denominator;
}
}
catch (DivideByZeroException $ex)
{
echo "DIVIDE BY ZERO EXCEPTION!";
}
catch (DivideByNegativeException $ex)
{
echo "DIVIDE BY NEGATIVE NUMBER EXCEPTION!";
}
catch (Exception $x)
{
echo "UNKNOWN EXCEPTION!";
}
}
process(0);
?>
Testen des Codes
Wir gehen davon aus, dass Sie multiple_Exceptions.php im Ordner phptuts gespeichert haben.
Navigieren Sie zu URL http://localhost/phptuts/multiple_exceptions.php
Wechseln Sie zurรผck zur PHP-Datei und รผbergeben Sie -1 als Parameter, wie im folgenden Diagramm gezeigt.
Navigieren Sie zu URL http://localhost/phptuts/multiple_exceptions.php.
Welche Ergebnisse erhalten Sie? รbergeben Sie 3 als Parameter.
Welche Ergebnisse erhalten Sie?
Zusammenfassung
- Fehler sind unerwartete Ergebnisse, die durch PHP-Code hervorgerufen werden
- Die Fehlerbehandlung verbessert die Anwendungsleistung
- PHP verfรผgt รผber integrierte Funktionen, mit denen Sie die Art und Weise anpassen kรถnnen, wie PHP Fehler meldet
- Ausnahmen รคhneln Fehlern, kรถnnen jedoch beim Auslรถsen mithilfe des Catch-Blocks abgefangen werden.
- Das Anzeigen von Fehlermeldungen mit Fehlerinformationen gilt als schlechte Sicherheitsmaรnahme.








