Signatur
Beschreibung
msgfmt_get_error_code() liefert den internen ICU-Fehlercode, der nach der zuletzt ausgeführten Operation auf einem MessageFormatter-Objekt gesetzt wurde. Damit lässt sich prüfen, ob z. B. eine Formatierungs- oder Parse-Operation erfolgreich war oder welcher Fehler aufgetreten ist.
Die Funktion ist die prozedurale Variante der Methode MessageFormatter::getErrorCode(). Sie arbeitet eng mit msgfmt_get_error_message() zusammen, das eine lesbare Fehlerbeschreibung zurückgibt. Fehlerfreie Operationen liefern den Wert U_ZERO_ERROR (= 0).
Typische Anwendungsfälle sind die Diagnose fehlerhafter Muster beim Erstellen eines Formatters sowie das Abfangen von Fehlern bei der Formatierung oder Analyse von Zeichenketten mit komplexen Mustern (z. B. Plural-Regeln, Datumsangaben).
- Rückgabewert
0entsprichtU_ZERO_ERROR— kein Fehler aufgetreten. - Negative oder positive Werte ungleich 0 weisen auf Fehler aus dem ICU-Fehlerkatalog hin.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $formatter Pflicht | MessageFormatter | Das MessageFormatter-Objekt, dessen letzter Fehlercode abgefragt werden soll. |
Rückgabewert
0 bedeutet kein Fehler (U_ZERO_ERROR); jeder andere Wert verweist auf einen spezifischen ICU-Fehler.Beispiele
Fehlercode nach erfolgloser Formatierung prüfen
<?php
$fmt = msgfmt_create('de_DE', '{0, number} {1}');
// Absichtlich falsches Argument übergeben (Array statt Scalar)
$result = msgfmt_format($fmt, []);
if ($result === false) {
$errorCode = msgfmt_get_error_code($fmt);
$errorMsg = msgfmt_get_error_message($fmt);
echo "Fehlercode: $errorCode\n";
echo "Fehlermeldung: $errorMsg\n";
} else {
echo "Formatiertes Ergebnis: $result\n";
}
Fehlercode nach erfolgreichem Formatter-Einsatz
<?php
$fmt = msgfmt_create('de_DE', 'Hallo {0}!');
$result = msgfmt_format($fmt, ['Welt']);
$errorCode = msgfmt_get_error_code($fmt);
echo "Ergebnis: $result\n";
echo "Fehlercode: $errorCode\n"; // 0 = kein Fehler
Fehlercode bei ungültigem Muster beim Erstellen
<?php
// Ungültiges Muster mit nicht geschlossener Klammer
$fmt = msgfmt_create('de_DE', '{0, number');
if ($fmt === false || $fmt === null) {
echo "Formatter konnte nicht erstellt werden.\n";
} else {
$errorCode = msgfmt_get_error_code($fmt);
echo "Fehlercode nach Erstellen: $errorCode\n";
echo "Fehlermeldung: " . msgfmt_get_error_message($fmt) . "\n";
}
// Wichtig · Fallstricke
Wichtig: Der Fehlercode wird bei jeder neuen Operation überschrieben. Rufe msgfmt_get_error_code() direkt nach der zu prüfenden Operation auf, um sicherzustellen, dass der Code zur letzten Aktion gehört.
Die Fehlercodes entsprechen den ICU-Fehlercodes (Header utypes.h). Eine vollständige Liste ist in der ICU-Dokumentation zu finden. Für eine menschenlesbare Beschreibung sollte msgfmt_get_error_message() verwendet werden.