Start · Sprachen · PHP · Referenz · IntlException

IntlException

Klasse

Ausnahme, die bei Fehlern in Funktionen der <code>intl</code>-Erweiterung ausgelöst wird, wenn die Konfigurationsoption <code>intl.use_exceptions</code> aktiviert ist.

seit PHP 5.5.0 Kategorie: error

Signatur

class IntlException extends Exception

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;
}
IntlException abgefangen: Constructor failed Fehlercode: 0

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';
apple 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.