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;

  1. 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.
  2. Benutzerdefinierte Fehlerhandler – Dies sind benutzerdefinierte Funktionen, die immer dann aufgerufen werden, wenn ein Fehler auftritt.
  3. 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

PHP-Fehlerbehandlung

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

PHP-Ausnahmebehandlung in 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

. PHP-Fehlerbehandlung


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.

PHP-Ausnahmebehandlung in PHP

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.

PHP-Ausnahmebehandlung in PHP

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

Mehrere 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

PHP-Ausnahmebehandlung in PHP

Wechseln Sie zurück zur PHP-Datei und übergeben Sie -1 als Parameter, wie im folgenden Diagramm gezeigt.

PHP-Ausnahmebehandlung in PHP

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.

Täglicher Guru99-Newsletter

Beginnen Sie Ihren Tag mit den neuesten und wichtigsten KI-Nachrichten, die jetzt geliefert werden.