Start · Sprachen · PHP · Referenz · numfmt_set_text_attribute

numfmt_set_text_attribute

Funktion

Setzt ein Text-Attribut eines <code>NumberFormatter</code>-Objekts, z. B. positive/negative Präfixe oder Suffixe.

seit PHP 5.3.0 Kategorie: string

Signatur

numfmt_set_text_attribute(NumberFormatter $formatter, int $attribute, string $value): bool

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

Typ
bool
Beschreibung
Gibt 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)
1.234,56 -1.234,56 +1.234,56 (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;
}
1.234,56 € 1.234,56 $

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