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 die 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
Methode | Beschreibung | Beispiel |
---|---|---|
getMessage () | Zeigt die Meldung der Ausnahme an |
<?php echo $e->getMessage(); ?> |
getCode() | 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(); ?> |
getTrace() | Zeigt ein Array des Backtrace vor der Ausnahme an |
<?php print_r( $e->getTrace()); ?> |
getPrevious() | Zeigt die vorherige Ausnahme vor der aktuellen an |
<?php echo $e->getPrevious(); ?> |
getTraceAsString() | Zeigt den Backtrace der Ausnahme als String statt als Array an |
<?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 die 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 zur 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 zur 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.