Signatur
Beschreibung
IntlException ist die Standard-Ausnahme der PHP-Internationalisierungserweiterung (intl). Sie wird geworfen, wenn in Funktionen wie Collator, NumberFormatter, MessageFormatter oder ähnlichen ICU-basierten Klassen ein Fehler auftritt – jedoch nur, wenn die PHP-Konfigurationsoption intl.use_exceptions auf 1 gesetzt ist. Ohne diese Einstellung werden Fehler lediglich als Warnungen oder Fehlercodes zurückgegeben.
IntlException erbt von der eingebauten Exception-Klasse und kann daher wie jede Standard-PHP-Ausnahme mit try/catch abgefangen werden. Es werden keine zusätzlichen Methoden oder Eigenschaften hinzugefügt; die Fehlermeldung und der Code können über die geerbten Methoden getMessage() und getCode() abgerufen werden.
Um IntlException konsequent verwenden zu können, empfiehlt es sich, in der php.ini oder per ini_set('intl.use_exceptions', 1) die Ausnahmen zu aktivieren. Alternativ kann man nach ICU-Operationen manuell den Fehlercode über Methoden wie intl_get_error_code() prüfen und ggf. eine eigene Ausnahme werfen.
Da die Klasse direkt von Exception ableitet, lässt sie sich problemlos in eigene Ausnahmehierarchien integrieren oder per catch (Exception $e) als Teil eines generischen Fehlerbehandlungsmusters abfangen.
Beispiele
IntlException abfangen bei ungültigem Locale
<?php
ini_set('intl.use_exceptions', 1);
try {
$formatter = new NumberFormatter('ungültiges-Locale!!!', NumberFormatter::DECIMAL);
echo $formatter->format(1234.56);
} catch (IntlException $e) {
echo 'IntlException abgefangen: ' . $e->getMessage() . PHP_EOL;
echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
}
Manuelle Fehlerprüfung ohne intl.use_exceptions
<?php
// intl.use_exceptions ist NICHT aktiviert — Fehler werden als Codes zurückgegeben
$collator = new Collator('en_US');
$result = $collator->compare('apple', 'banana');
if (intl_is_failure(intl_get_error_code())) {
$errorCode = intl_get_error_code();
$errorMsg = intl_get_error_message();
throw new IntlException(
'Collator-Fehler: ' . $errorMsg,
$errorCode
);
}
echo $result < 0 ? 'apple kommt zuerst' : 'banana kommt zuerst';
// Wichtig · Fallstricke
Konfiguration beachten: IntlException wird nur automatisch geworfen, wenn intl.use_exceptions = 1 in der php.ini gesetzt oder per ini_set() aktiviert ist. Standardmäßig ist diese Option deaktiviert (0), sodass ohne explizite Aktivierung keine Ausnahmen geworfen werden.
Fehlercode-Bedeutung: Die zurückgegebenen Fehlercodes entsprechen ICU-Fehlercodes (negative Werte = Fehler, positive = Warnungen). Für eine aussagekräftige Fehlermeldung kann intl_error_name() genutzt werden, um den Fehlercode in einen lesbaren Namen umzuwandeln.