Signatur
Beschreibung
DateMalformedPeriodStringException ist eine spezifische Ausnahme, die ausgelöst wird, wenn der an DatePeriod::__construct() übergebene ISO-8601-Intervall-String syntaktisch ungültig ist. Sie erbt von DateException und ermöglicht eine gezielte Fehlerbehandlung für fehlerhafte Periodenangaben.
Typische Ursachen für diese Ausnahme sind fehlende oder falsch formatierte Bestandteile des ISO-8601-Perioden-Strings, z. B. ein fehlerhaftes Startdatum, ein ungültiges Intervall oder eine falsch angegebene Wiederholungsanzahl (z. B. R5/2023-01-01T00:00:00Z/P1D ist gültig, während INVALID/P1D diese Exception auslöst).
Vor PHP 8.3 verhielt sich DatePeriod bei ungültigen Strings je nach Konfiguration unterschiedlich – mit Warnungen oder ohne eindeutige Fehlermeldung. Ab PHP 8.3 wird konsequent eine Exception geworfen, was eine robustere und vorhersehbarere Fehlerbehandlung erlaubt.
Es empfiehlt sich, beim Verarbeiten von Periodenstrings aus externen Quellen (z. B. Benutzereingaben oder APIs) einen try/catch-Block mit DateMalformedPeriodStringException zu verwenden, um ungültige Eingaben sauber abzufangen.
Beispiele
Ungültigen Perioden-String abfangen
<?php
try {
$period = new DatePeriod('UNGUELTIG/P1D');
} catch (DateMalformedPeriodStringException $e) {
echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}
Validierung eines Perioden-Strings aus Benutzereingabe
<?php
function parsePeriod(string $isoStr): ?DatePeriod {
try {
return new DatePeriod($isoStr);
} catch (DateMalformedPeriodStringException $e) {
// Ungültigen String protokollieren und null zurückgeben
error_log('Ungültiger Perioden-String: ' . $isoStr . ' – ' . $e->getMessage());
return null;
}
}
$gueltig = parsePeriod('R3/2024-01-01T00:00:00Z/P1M');
$ungueltig = parsePeriod('KEIN_GÜLTIGES_FORMAT');
var_dump($gueltig instanceof DatePeriod); // true
var_dump($ungueltig); // NULL
// Wichtig · Fallstricke
Hinweis zur Versionsgeschichte: Vor PHP 8.3 konnte DatePeriod::__construct() bei ungültigen Strings eine E_WARNING-Warnung ausgeben, ohne eine Exception zu werfen. Ab PHP 8.3 wird stattdessen konsequent DateMalformedPeriodStringException geworfen. Code, der @-Fehlerunterdrückung oder manuelle Prüfungen verwendet hat, sollte auf den neuen Exception-Mechanismus umgestellt werden.
Da DateMalformedPeriodStringException von DateException erbt, kann alternativ auch DateException oder das übergeordnete Exception gefangen werden, wenn keine spezifische Behandlung notwendig ist.