Signatur
Beschreibung
DateError ist eine Fehlerklasse, die von Error erbt und in PHP 8.3 eingeführt wurde. Sie dient als Basisklasse für schwerwiegende Fehler im Zusammenhang mit Datums- und Zeitzonenfunktionen, insbesondere wenn die Zeitzonen-Datenbank (tzdata) fehlt oder beschädigte bzw. ungültige Daten enthält.
Im Gegensatz zu DateException, die für logische Fehler bei der Datumsverarbeitung vorgesehen ist, signalisiert DateError einen tatsächlichen Systemfehler – beispielsweise wenn PHP die interne Zeitzonendatenbank nicht laden kann. Da es sich um einen Error handelt, sollte er in der Regel nicht einfach ignoriert werden, sondern auf ein Konfigurationsproblem der Laufzeitumgebung hinweisen.
In der Klassen-Hierarchie der PHP-Datumsbehandlung ist DateError die Elternklasse von spezifischeren Fehlerklassen wie DateRangeError. Anwendungen können DateError abfangen, um alle datumsbezogenen Systemfehler zentral zu behandeln.
Typische Szenarien, in denen DateError oder eine ihrer Unterklassen geworfen werden: fehlende oder korrupte tzdata-Bibliothek auf dem Server, oder ein Datumswert liegt außerhalb des darstellbaren Bereichs der internen Implementierung.
Beispiele
DateError abfangen
<?php
try {
// Simulierter Kontext: Datumsfehler abfangen
// DateError wird typischerweise intern von PHP geworfen,
// z. B. bei defekter Zeitzonen-Datenbank
throw new DateError('Zeitzonen-Datenbank konnte nicht geladen werden.');
} catch (DateError $e) {
echo 'Datumsfehler aufgetreten: ' . $e->getMessage() . PHP_EOL;
echo 'Code: ' . $e->getCode() . PHP_EOL;
}
Hierarchisches Abfangen von DateError und DateRangeError
<?php
function createDate(string $dateString): DateTimeImmutable {
try {
return new DateTimeImmutable($dateString);
} catch (DateRangeError $e) {
// Spezifischer Fehler: Datum außerhalb des gültigen Bereichs
echo 'Datum außerhalb des Bereichs: ' . $e->getMessage() . PHP_EOL;
throw $e;
} catch (DateError $e) {
// Allgemeiner Datumssystemfehler
echo 'Allgemeiner Datumsfehler: ' . $e->getMessage() . PHP_EOL;
throw $e;
}
}
try {
$date = createDate('2024-06-15');
echo $date->format('Y-m-d') . PHP_EOL;
} catch (DateError $e) {
echo 'Fehler konnte nicht behoben werden.' . PHP_EOL;
}
// Wichtig · Fallstricke
Wichtig: DateError ist eine Unterklasse von Error, nicht von Exception. Ein generisches catch (Exception $e) wird DateError daher nicht abfangen. Verwende stattdessen catch (DateError $e) oder catch (\Throwable $e) für eine vollständige Fehlerbehandlung.
DateError wurde in PHP 8.3 eingeführt. In älteren PHP-Versionen existiert diese Klasse nicht, was bei der Entwicklung von Bibliotheken mit breiter Versionsunterstützung zu berücksichtigen ist.
Da es sich um einen systemnahen Fehler handelt, sollte das Auftreten von DateError im Produktivbetrieb als kritisches Infrastrukturproblem behandelt und entsprechend geloggt werden.