Start · Sprachen · PHP · Referenz · intl_is_failure

intl_is_failure

Funktion

Prüft, ob ein ICU-Fehlercode einen tatsächlichen Fehler (im Gegensatz zu einer Warnung oder Erfolg) anzeigt.

seit PHP 5.3.0 Kategorie: string

Signatur

intl_is_failure(int $error_code): bool

Beschreibung

intl_is_failure() wertet einen ICU-Fehlercode aus und gibt zurück, ob dieser einen echten Fehler darstellt. Die Funktion gehört zur Internationalization Extension (Intl) und arbeitet mit den Fehlercodes, die von ICU-Operationen erzeugt werden.

ICU unterscheidet zwischen Fehlern (errors) und Warnungen (warnings). Warnungen signalisieren, dass eine Operation zwar abgeschlossen wurde, aber möglicherweise nicht wie erwartet. Echte Fehler bedeuten hingegen, dass die Operation fehlgeschlagen ist. intl_is_failure() gibt nur bei echten Fehlern true zurück – bei Warnungen und Erfolgscodes false.

Typischerweise wird diese Funktion in Kombination mit intl_get_error_code() verwendet, um nach Intl-Operationen zu prüfen, ob ein Fehler aufgetreten ist. Alternativ bieten viele Intl-Klassen wie Collator oder NumberFormatter eigene getErrorCode()-Methoden an, deren Rückgabewert direkt an intl_is_failure() übergeben werden kann.

Die Funktion ist besonders nützlich, wenn man zwischen Warnungen und Fehlern differenzieren möchte, anstatt nur zu prüfen, ob der Fehlercode ungleich U_ZERO_ERROR ist.

Parameter

Name Typ Default Beschreibung
$error_code Pflicht int Ein ICU-Fehlercode, typischerweise von intl_get_error_code() oder der getErrorCode()-Methode eines Intl-Objekts zurückgegeben.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der übergebene Fehlercode einen echten Fehler darstellt, andernfalls false (bei Warnungen oder Erfolg).

Beispiele

Fehlerprüfung nach einer Collator-Operation

<?php
$collator = new Collator('de_DE');
$result = $collator->compare('Äpfel', 'Apfel');

$errorCode = $collator->getErrorCode();
if (intl_is_failure($errorCode)) {
    echo 'Fehler aufgetreten: ' . $collator->getErrorMessage();
} else {
    echo 'Vergleichsergebnis: ' . $result;
}
Vergleichsergebnis: 1

Unterschied zwischen Fehler und Warnung erkennen

<?php
// Globalen Intl-Fehlercode nach einer fehlerhaften Operation prüfen
$formatter = new NumberFormatter('ungültige_Locale_XYZ', NumberFormatter::DECIMAL);

$errorCode = intl_get_error_code();

if (intl_is_failure($errorCode)) {
    echo 'Echter Fehler: ' . intl_get_error_message() . PHP_EOL;
    echo 'Fehlercode: ' . $errorCode . PHP_EOL;
} else {
    echo 'Kein Fehler (ggf. nur Warnung oder Erfolg).' . PHP_EOL;
}
Echter Fehler: Constructor failed: U_ILLEGAL_ARGUMENT_ERROR Fehlercode: 1

Warnung vs. Fehler unterscheiden

<?php
// U_ZERO_ERROR = 0 (kein Fehler)
// U_BUFFER_OVERFLOW_ERROR = 15 (Fehler)
// U_STRING_NOT_TERMINATED_WARNING = -124 (Warnung)

$codes = [
    0   => 'U_ZERO_ERROR',
    15  => 'U_BUFFER_OVERFLOW_ERROR',
    -124 => 'U_STRING_NOT_TERMINATED_WARNING',
];

foreach ($codes as $code => $name) {
    $isFailure = intl_is_failure($code) ? 'JA' : 'NEIN';
    echo "$name ($code): Fehler? $isFailure" . PHP_EOL;
}
U_ZERO_ERROR (0): Fehler? NEIN U_BUFFER_OVERFLOW_ERROR (15): Fehler? JA U_STRING_NOT_TERMINATED_WARNING (-124): Fehler? NEIN

// Wichtig · Fallstricke

Hinweis zur Unterscheidung von Warnungen: ICU-Warncodes sind typischerweise negativ, Fehlercodes positiv und U_ZERO_ERROR (0) zeigt Erfolg an. intl_is_failure() gibt nur bei positiven Fehlercodes true zurück.

Die Funktion ist eine prozedurale Alternative zur Methode Collator::getErrorCode() und ähnlichen objektorientierten Methoden. Wer ausschließlich mit Intl-Objekten arbeitet, kann auch direkt deren getErrorMessage() nutzen, ohne den globalen Fehlerstatus prüfen zu müssen.

Die Intl-Extension muss aktiviert sein (extension=intl in der php.ini), andernfalls steht die Funktion nicht zur Verfügung.