Start · Sprachen · PHP · Referenz · ErrorException

ErrorException

Klasse

Ermöglicht es, PHP-Laufzeitfehler als <code>ErrorException</code> zu werfen und mit dem normalen Exception-Handling zu behandeln.

seit PHP 5.1.0 Kategorie: error

Signatur

class ErrorException extends Exception

Beschreibung

ErrorException ist eine spezielle Exception-Klasse, die dazu dient, klassische PHP-Fehler (Notices, Warnings, Errors usw.) in das objektorientierte Exception-System zu integrieren. Anstatt dass ein Fehler nur ausgegeben oder geloggt wird, kann er als Exception geworfen und mit try/catch abgefangen werden.

Typischerweise wird ErrorException in Verbindung mit einem benutzerdefinierten Fehler-Handler verwendet, der über set_error_handler() registriert wird. Dieser Handler konvertiert PHP-Fehlerstufen (z. B. E_WARNING, E_NOTICE) in ErrorException-Instanzen und wirft diese. Dadurch kann einheitlich mit try/catch/finally gearbeitet werden.

Die Klasse erweitert Exception um den Parameter $severity, der die ursprüngliche PHP-Fehlerstufe (z. B. E_WARNING) speichert. Dieser Wert kann mit der Methode getSeverity() abgerufen werden.

Dies ist besonders nützlich in modernen Applikationen und Frameworks (wie Symfony oder Laravel), die einen strikten Fehlerumgang bevorzugen und alle Fehlerarten als Exceptions behandeln wollen, um robusteren und besser wartbaren Code zu schreiben.

Parameter

Name Typ Default Beschreibung
$message Pflicht string Die Fehlermeldung als Text.
$code int 0 Ein optionaler numerischer Fehlercode.
$severity int E_ERROR Die PHP-Fehlerstufe, z. B. E_WARNING oder E_NOTICE. Abrufbar über getSeverity().
$filename string Der Dateiname, in dem der Fehler aufgetreten ist.
$line int Die Zeilennummer, in der der Fehler aufgetreten ist.
$previous Throwable|null null Eine optionale vorherige Exception für Exception-Chaining.

Beispiele

PHP-Fehler mit set_error_handler in ErrorException umwandeln

<?php
set_error_handler(function (int $errno, string $errstr, string $errfile, int $errline): bool {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
});

try {
    // Erzeugt normalerweise eine E_WARNING
    $result = file_get_contents('/nicht/vorhanden/datei.txt');
} catch (ErrorException $e) {
    echo 'Fehler abgefangen: ' . $e->getMessage() . PHP_EOL;
    echo 'Schweregrad: ' . $e->getSeverity() . PHP_EOL;
}

restore_error_handler();
Fehler abgefangen: file_get_contents(/nicht/vorhanden/datei.txt): Failed to open stream: No such file or directory Schweregrad: 2

ErrorException manuell werfen und mit getSeverity auswerten

<?php
function riskiereOperation(bool $fehlerhaft): void {
    if ($fehlerhaft) {
        throw new ErrorException(
            'Ungültiger Zustand erkannt',
            0,
            E_WARNING,
            __FILE__,
            __LINE__
        );
    }
    echo 'Alles in Ordnung.' . PHP_EOL;
}

try {
    riskiereOperation(true);
} catch (ErrorException $e) {
    echo 'Exception: ' . $e->getMessage() . PHP_EOL;
    echo 'Datei: ' . basename($e->getFile()) . PHP_EOL;
    echo 'Zeile: ' . $e->getLine() . PHP_EOL;
    echo 'Severity: ' . $e->getSeverity() . ' (E_WARNING = ' . E_WARNING . ')' . PHP_EOL;
}
Exception: Ungültiger Zustand erkannt Datei: beispiel.php Zeile: 6 Severity: 2 (E_WARNING = 2)

// Wichtig · Fallstricke

Wichtig: Wenn set_error_handler() mit einem Handler verwendet wird, der ErrorException wirft, werden Fehler wie E_ERROR oder E_PARSE nicht abgefangen, da diese PHP direkt beenden, bevor der Handler aufgerufen wird.

Die Methode getSeverity() gibt die PHP-Fehlerstufe zurück, die beim Erstellen der Exception übergeben wurde – standardmäßig E_ERROR (Wert: 1), wenn kein Wert angegeben wurde. Es empfiehlt sich, im Fehler-Handler immer den tatsächlichen $errno-Wert zu übergeben.

Das Restaurieren des ursprünglichen Fehler-Handlers mit restore_error_handler() nach dem try/catch-Block ist empfehlenswert, um ungewollte Seiteneffekte in anderen Codebereichen zu vermeiden.