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 den Microsoft Store auf Ihrem Windows-PC 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

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.

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 den Microsoft Store auf Ihrem Windows-PC 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 zu 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 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.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: