PHP - Ausnahmen

Das Throwable Interface

In PHP sind Ausnahmen Objekte, die außergewöhnliche Bedingungen darstellen. Sie werden geworfen, wenn ein spezifischer Fehler in Ihrem Code auftritt. PHP bietet die Throwable-Schnittstelle, die die Basisklasse für alle Ausnahmen und Fehler ist. Sie hat mehrere Methoden, die Ihnen ermöglichen, Ausnahmen effektiv zu behandeln.

PHP - Exceptions

Grundlegende Ausnahmebehandlung

Um Ausnahmen in PHP zu behandeln, können Sie den try-catch-Block verwenden. Hier ist ein Beispiel:

<?php
try {
// Code, der möglicherweise eine Ausnahme wirft
throw new Exception("Ein Fehler ist aufgetreten!");
} catch (Exception $e) {
// Code zur Behandlung der Ausnahme
echo " Gefangene Ausnahme: " . $e->getMessage();
}
?>

In diesem Beispiel verwenden wir die throw-Anweisung, um ein neues Exception-Objekt mit einer benutzerdefinierten Nachricht zu erstellen. Wenn innerhalb des try-Blocks eine Ausnahme geworfen wird, springt die Codeausführung zum entsprechenden catch-Block, wo die Ausnahme gefangen und behandelt wird.

set_exception_handler

Die Funktion set_exception_handler ermöglicht es Ihnen, eine benutzerdefinierte Funktion zu definieren, die aufgerufen wird, wenn eine nicht gefangene Ausnahme geworfen wird. Diese Funktion sollte zwei Parameter annehmen: das Ausnahmeobjekt und einen Boole-Wert, der anzeigt, ob die Ausnahme während eines Aufrufs von eval() geworfen wurde.

Hier ist ein Beispiel, wie man set_exception_handler verwendet:

<?php
function myExceptionHandler($exception) {
echo "Nicht gefangene Ausnahme: " . $exception->getMessage();
}

set_exception_handler('myExceptionHandler');

// Code, der eine Ausnahme wirft
throw new Exception("Ups! Etwas ist schiefgelaufen.");
?>

In diesem Beispiel definieren wir eine benutzerdefinierte Ausnahmeanweisungsfunction namens myExceptionHandler. Wir verwenden dann set_exception_handler, um diese Funktion als Standardausnahmeanweisungsfunction zu setzen. Wenn eine nicht gefangene Ausnahme geworfen wird, wird unsere benutzerdefinierte Funktion anstelle der Standardfunktion aufgerufen.

SPL Ausnahmen

PHP bietet mehrere eingebauten Ausnahme-Klassen in der Standard PHP Bibliothek (SPL). Diese Klassen erweitern die Exception-Klasse und bieten spezifischere Informationen über verschiedene Arten von Ausnahmen. Einige häufige SPL Ausnahmen sind:

  • BadFunctionCallException: Geworfen, wenn ein Callback auf eine undefinierte Funktion verweist oder wenn einige Argumente fehlen.
  • DomainException: Wird für Fehler in der Domänenlogik Ihrer Anwendung verwendet.
  • InvalidArgumentException: Ausgelöst, wenn eine Funktion ein Argument erhält, das sie nicht akzeptiert.
  • LengthException: Verwendet, wenn eine Operation versucht, ein Objekt der falschen Länge zu verwenden.
  • OutOfBoundsException: Geworfen, wenn ein Array-Index außerhalb der Grenzen liegt.
  • OutOfRangeException: Ausgelöst, wenn ein Wert nicht im erwarteten Bereich liegt.
  • RangeException: Verwendet, wenn ein Wert nicht im angegebenen Bereich liegt.
  • RuntimeException: Allgemeiner Zweck-Ausnahme für Laufzeitfehler.
  • UnderflowException: Geworfen, wenn ein Underflow auftritt (z.B. Subtrahieren von einem leeren Stapel).
  • UnexpectedValueException: Ausgelöst, wenn ein Wert nicht mit dem erwarteten Typ übereinstimmt.

Sie können diese SPL Ausnahmen in Ihrem Code wie jede andere Ausnahme-Klasse verwenden. Zum Beispiel:

<?php
function divide($a, $b) {
if ($b == 0) {
throw new DivisionByZeroError("Division durch Null ist nicht erlaubt.");
}
return $a / $b;
}

try {
echo divide(10, 0);
} catch (DivisionByZeroError $e) {
echo "Gefangene Ausnahme: " . $e->getMessage();
}
?>

Benutzerdefinierte Ausnahme

Zusätzlich zur Verwendung eingebauter SPL Ausnahmen können Sie auch eigene benutzerdefinierte Ausnahme-Klassen erstellen. Dies tun Sie, indem Sie die Exception-Klasse erweitern und jegliche zusätzliche Funktionalität hinzufügen, die Sie benötigen. Hier ist ein Beispiel:

<?php
class MyCustomException extends Exception {
public function __construct($message, $code = 0, Exception $previous = null) {
parent::__construct($message, $code, $previous);
}
}

try {
throw new MyCustomException("Dies ist eine benutzerdefinierte Ausnahme.");
} catch (MyCustomException $e) {
echo "Gefangene benutzerdefinierte Ausnahme: " . $e->getMessage();
}
?>

In diesem Beispiel erstellen wir eine neue Klasse namens MyCustomException, die die Exception-Klasse erweitert. Wir werfen und fangen dann eine Instanz dieser benutzerdefinierten Ausnahme genau wie jede andere Ausnahme.

Durch die Beachtung dieser Richtlinien und die Nutzung der bereitgestellten Werkzeuge können Sie Ausnahmen in Ihrem PHP-Code effektiv behandeln und sicherstellen, dass Ihre Anwendungen robust und widerstandsfähig gegen unerwartete Fehler sind. Denken Sie daran, Ihren Code gründlich zu testen und Ausnahmen elegant zu behandeln, um eine bessere Benutzererfahrung zu bieten.

Credits: Image by storyset