Signatur
Beschreibung
money_format() wandelt eine Gleitkommazahl in eine locale-abhängige Währungsdarstellung um. Der Formatstring folgt der Konvention der C-Funktion strfmon() und erlaubt über Spezifikator-Sequenzen eine genaue Steuerung von Vorzeichen, Auffüllzeichen, Breite, Nachkommastellen und Währungssymbol.
Damit die Funktion korrekt arbeitet, muss zuvor mit setlocale() ein geeignetes Locale gesetzt werden (z. B. de_DE.UTF-8 für deutsches Währungsformat). Ohne gesetztes Locale entspricht die Ausgabe dem Standard-C-Locale, das kein Währungssymbol enthält.
Wichtig: money_format() wurde in PHP 7.4 als deprecated markiert und in PHP 8.0 vollständig entfernt. Als Ersatz empfiehlt die PHP-Dokumentation offiziell die Klasse NumberFormatter aus der Intl-Erweiterung.
%i– internationale Währungsdarstellung (z. B. EUR 1.234,56)%n– nationale Währungsdarstellung (z. B. € 1.234,56)- Modifikatoren wie
%=*(Füllzeichen),%-(linksbündig),%+(Vorzeichendarstellung) sind kombinierbar.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $format Pflicht | string | Formatstring im strfmon()-Stil. Enthält mindestens einen Währungs-Konversionsspezifikator (%i für international, %n für national). Alle anderen Zeichen werden unverändert in die Ausgabe übernommen. |
|
| $number Pflicht | float | Der zu formatierende numerische Wert als Gleitkommazahl. |
Rückgabewert
number kein gültiger Zahlwert ist oder der Formatstring ungültig ist, kann eine leere Zeichenkette oder false zurückgegeben werden.Beispiele
Nationale Währungsformatierung mit deutschem Locale
<?php
// Locale auf Deutsch (Deutschland) setzen
setlocale(LC_MONETARY, 'de_DE.UTF-8');
$betrag = 1234.56;
// Nationale Darstellung
echo money_format('%n', $betrag) . PHP_EOL;
// Internationale Darstellung
echo money_format('%i', $betrag) . PHP_EOL;
// Mit Text drumherum
echo money_format('Gesamtbetrag: %n EUR', $betrag) . PHP_EOL;
Moderner Ersatz mit NumberFormatter (PHP 7.4+ / 8.0+)
<?php
// Empfohlener Ersatz für money_format() ab PHP 7.4 / 8.0
$betrag = 1234.56;
$formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
// Mit Währungscode formatieren
echo $formatter->formatCurrency($betrag, 'EUR') . PHP_EOL;
// US-Dollar
$formatterUS = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $formatterUS->formatCurrency($betrag, 'USD') . PHP_EOL;
// Wichtig · Fallstricke
Deprecation / Entfernung: money_format() ist seit PHP 7.4.0 als veraltet (deprecated) eingestuft und wurde in PHP 8.0.0 vollständig entfernt. Neuer Code sollte ausschließlich NumberFormatter::formatCurrency() aus der intl-Erweiterung verwenden.
Plattformabhängigkeit: Die Funktion war auf Systemen, die keine strfmon()-Implementierung besitzen (z. B. Windows), nicht verfügbar und konnte dort gar nicht genutzt werden.
Locale-Abhängigkeit: Das Ergebnis hängt vollständig vom gesetzten Locale ab. Ein nicht korrekt gesetztes Locale führt zu unerwarteten oder leeren Ausgaben. Das Locale muss auf dem Betriebssystem installiert sein.