Start · Sprachen · PHP · Referenz · msgfmt_get_error_message

msgfmt_get_error_message

Funktion

Gibt den Fehlertext der letzten Operation des <code>MessageFormatter</code>-Objekts als lesbaren String zurück.

seit PHP 5.3.0 Kategorie: string

Signatur

msgfmt_get_error_message(MessageFormatter $formatter): string

Beschreibung

msgfmt_get_error_message() ist die prozedurale Variante der Methode MessageFormatter::getErrorMessage() und liefert eine menschenlesbare Fehlerbeschreibung, die bei der letzten Operation des angegebenen MessageFormatter-Objekts aufgetreten ist. Wenn kein Fehler aufgetreten ist, wird typischerweise "U_ZERO_ERROR" zurückgegeben.

Die Funktion ist besonders nützlich in Kombination mit msgfmt_get_error_code(), um nach fehlgeschlagenen Formatierungs- oder Parsing-Operationen eine detaillierte Diagnose zu erstellen. Während msgfmt_get_error_code() den numerischen ICU-Fehlercode liefert, gibt msgfmt_get_error_message() eine sprechende Klartextbeschreibung zurück, die für Logging oder Debugging besser geeignet ist.

Typische Einsatzszenarien sind die Fehlerbehandlung nach msgfmt_format() oder msgfmt_parse(), wenn diese false zurückgeben und der genaue Fehlergrund ermittelt werden soll. Die Fehlermeldungen stammen aus der zugrunde liegenden ICU-Bibliothek und sind auf Englisch.

Parameter

Name Typ Default Beschreibung
$formatter Pflicht MessageFormatter Das MessageFormatter-Objekt, dessen letzter Fehlerzustand abgefragt werden soll.

Rückgabewert

Typ
string
Beschreibung
Gibt den Fehlertext der letzten Operation als String zurück. Wenn kein Fehler aufgetreten ist, wird "U_ZERO_ERROR" zurückgegeben.

Beispiele

Fehlertext nach fehlgeschlagener Formatierung ausgeben

<?php
// Formatter mit gültigem Pattern erstellen
$fmt = msgfmt_create('de_DE', '{0, number} {1}');

// Falsches Argument übergeben (String statt Zahl erwartet)
$result = msgfmt_format($fmt, ['kein_number_wert_als_array_key' => 'test']);

if ($result === false) {
    $errorCode    = msgfmt_get_error_code($fmt);
    $errorMessage = msgfmt_get_error_message($fmt);
    echo "Fehlercode: $errorCode\n";
    echo "Fehlermeldung: $errorMessage\n";
} else {
    echo $result;
}
Fehlercode: 0 Fehlermeldung: U_ZERO_ERROR

Fehlertext nach ungültigem Pattern abfragen

<?php
// Ungültiges Message-Pattern erzeugt beim Erstellen einen Fehler
$fmt = msgfmt_create('de_DE', '{0, UNGUELTIGERTYP}');

if ($fmt === false) {
    // Kein Objekt verfügbar, daher statische Variante nutzen
    echo 'MessageFormatter konnte nicht erstellt werden.' . PHP_EOL;
} else {
    // Formatierung versuchen
    $result = msgfmt_format($fmt, [42]);
    if ($result === false) {
        echo 'Formatierung fehlgeschlagen.' . PHP_EOL;
        echo 'Fehlermeldung: ' . msgfmt_get_error_message($fmt) . PHP_EOL;
        echo 'Fehlercode: ' . msgfmt_get_error_code($fmt) . PHP_EOL;
    } else {
        echo $result . PHP_EOL;
    }
}
Formatierung fehlgeschlagen. Fehlermeldung: U_ILLEGAL_ARGUMENT_ERROR Fehlercode: 1

// Wichtig · Fallstricke

Die Fehlermeldungen stammen direkt aus der ICU-Bibliothek (International Components for Unicode) und sind immer auf Englisch, unabhängig vom eingestellten Locale des Formatters.

Wenn msgfmt_create() fehlschlägt und false zurückgibt, steht kein Formatter-Objekt zur Verfügung, weshalb msgfmt_get_error_message() nicht aufgerufen werden kann. In diesem Fall kann intl_get_error_message() genutzt werden, um den globalen ICU-Fehlerstatus abzufragen.

Diese Funktion kann alternativ als Methode MessageFormatter::getErrorMessage() objektorientiert aufgerufen werden.