Start · Sprachen · PHP · Referenz · msgfmt_get_error_code

msgfmt_get_error_code

Funktion

Gibt den Fehlercode der letzten Operation eines <code>MessageFormatter</code>-Objekts zurück.

seit PHP 5.3.0 Kategorie: string

Signatur

msgfmt_get_error_code(MessageFormatter $formatter): int

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 0 entspricht U_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

Typ
int
Beschreibung
Gibt den ICU-Fehlercode der letzten Operation zurück. 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: 8 Fehlermeldung: Argument array and format # mismatch

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
Ergebnis: Hallo Welt! Fehlercode: 0

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";
}
Formatter konnte nicht erstellt werden.

// 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.