Signatur
Beschreibung
numfmt_set_text_attribute() ist die prozedurale Variante der Methode NumberFormatter::setTextAttribute() aus der intl-Erweiterung. Sie erlaubt das Setzen textbasierter Formatierungsattribute, etwa welches Symbol oder welcher Text vor oder hinter positiven bzw. negativen Zahlen erscheint.
Im Gegensatz zu numerischen Attributen (die mit numfmt_set_attribute() gesetzt werden) betreffen Text-Attribute Zeichenketten-Werte, wie etwa Präfixe, Suffixe oder das verwendete Währungssymbol. Diese Attribute werden durch Konstanten der Klasse NumberFormatter identifiziert, z. B. NumberFormatter::POSITIVE_PREFIX, NumberFormatter::NEGATIVE_SUFFIX oder NumberFormatter::CURRENCY_CODE.
Die Funktion ist besonders nützlich, wenn das Standardverhalten eines Zahlenformatierers für eine bestimmte Locale angepasst werden muss – etwa um eigene Präfixe für Währungsangaben oder spezielle Klammerschreibweisen für negative Zahlen zu definieren.
Beachte, dass nicht alle Attributkonstanten für jeden Formatter-Typ gültig sind. Bei ungültiger Kombination aus Formatter-Typ und Attribut gibt die Funktion false zurück und setzt einen Fehler, der mit numfmt_get_error_code() abgerufen werden kann.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $formatter Pflicht | NumberFormatter | Ein NumberFormatter-Objekt, das zuvor mit numfmt_create() oder new NumberFormatter() erzeugt wurde. |
|
| $attribute Pflicht | int | Die Attributkonstante, die gesetzt werden soll. Gültige Werte sind z. B. NumberFormatter::POSITIVE_PREFIX, NumberFormatter::POSITIVE_SUFFIX, NumberFormatter::NEGATIVE_PREFIX, NumberFormatter::NEGATIVE_SUFFIX, NumberFormatter::PADDING_CHARACTER, NumberFormatter::CURRENCY_CODE oder NumberFormatter::DEFAULT_RULESET. |
|
| $value Pflicht | string | Der neue Textwert, der dem Attribut zugewiesen werden soll, z. B. "+", "EUR" oder "(". |
Rückgabewert
true bei Erfolg zurück, andernfalls false. Im Fehlerfall kann der genaue Fehlercode mit numfmt_get_error_code($formatter) und die Fehlermeldung mit numfmt_get_error_message($formatter) abgerufen werden.Beispiele
Positives und negatives Präfix anpassen
<?php
$formatter = numfmt_create('de_DE', NumberFormatter::DECIMAL);
// Standard-Formatierung
echo numfmt_format($formatter, 1234.56) . PHP_EOL; // 1.234,56
echo numfmt_format($formatter, -1234.56) . PHP_EOL; // -1.234,56
// Positives Präfix auf "+" setzen
numfmt_set_text_attribute($formatter, NumberFormatter::POSITIVE_PREFIX, '+');
// Negatives Präfix auf Klammer ändern
numfmt_set_text_attribute($formatter, NumberFormatter::NEGATIVE_PREFIX, '(');
numfmt_set_text_attribute($formatter, NumberFormatter::NEGATIVE_SUFFIX, ')');
echo numfmt_format($formatter, 1234.56) . PHP_EOL; // +1.234,56
echo numfmt_format($formatter, -1234.56) . PHP_EOL; // (1.234,56)
Währungscode für einen Währungsformatierer setzen
<?php
$formatter = numfmt_create('de_DE', NumberFormatter::CURRENCY);
// Standard: Euro
echo numfmt_format_currency($formatter, 1234.56, 'EUR') . PHP_EOL;
// Währungscode explizit auf USD setzen
numfmt_set_text_attribute($formatter, NumberFormatter::CURRENCY_CODE, 'USD');
// Jetzt mit USD formatieren
echo numfmt_format_currency($formatter, 1234.56, 'USD') . PHP_EOL;
// Fehlerbehandlung
if (!numfmt_set_text_attribute($formatter, NumberFormatter::POSITIVE_PREFIX, '')) {
echo 'Fehler: ' . numfmt_get_error_message($formatter) . PHP_EOL;
}
// Wichtig · Fallstricke
Formatter-Typ beachten: Manche Attribute wie NumberFormatter::DEFAULT_RULESET oder NumberFormatter::PUBLIC_RULESETS sind nur für regelbasierte Formatter (z. B. NumberFormatter::SPELLOUT) gültig. Bei falscher Kombination gibt die Funktion false zurück.
OOP-Äquivalent: Die objektorientierte Variante lautet $formatter->setTextAttribute($attribute, $value) und ist funktional identisch.
Locale-Abhängigkeit: Bereits vorhandene locale-spezifische Standardwerte werden durch den gesetzten Text überschrieben. Beim Wechsel der Locale oder beim erneuten Erstellen des Formatters gehen diese Anpassungen verloren.