Signatur
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
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;
}
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;
}
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;
}
// 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.