2012-04-02 9 views
6

Ich habe gelesen, dass money_format nicht auf Windows und auf einigen Linux-Distributionen (d. H BSD 4.11-Varianten) verfügbar ist. Aber ich möchte plattformübergreifende Bibliothek mit normaler Funktion schreiben, wenn sie verfügbar ist und diese workaround wenn nicht verwenden, so dass meine Bibliothek auf jedem PHP-basierten Webserver laufen kann.Definition plattformübergreifender money_format-Funktion (Linux und Windows)

Gibt es eine einfache Lösung, um zu überprüfen, ob die eingebaute Funktion verfügbar ist und ob die Lösung von oben nicht enthalten sein soll?

+0

Sie haben gebrauchsfertigen Code, also, was ist die Frage? – kirilloid

+0

Woher weiß ich, ob die Plattform die integrierte Funktion unterstützt? Ich möchte keine benutzerdefinierte verwenden, wenn normal verfügbar ist ... – Karol

+3

wenn 'function_exists' /' is_callable' – kirilloid

Antwort

11

Die Funktion money_format() wird nur definiert, wenn das System über Funktionen von strfmon verfügt. Zum Beispiel, Windows nicht, so money_format() ist in Windows nicht definiert.

So können Sie diese PHP-Code verwenden:

setlocale(LC_ALL, ''); // Locale will be different on each system. 
$amount = 1000000.97; 
$locale = localeconv(); 
echo $locale['currency_symbol'], number_format($amount, 2, $locale['decimal_point'], $locale['thousands_sep']); 

Damit Sie Code schreiben können, anstatt tatsächlich tragbar ist, sich auf Betriebssystemfunktionen. Die Funktion money_format in PHP verfügbar zu haben, ohne dass es sich um eine Erweiterung handelt, ist ziemlich dumm. Ich sehe nicht, warum Sie solche Inkonsistenzen zwischen verschiedenen Betriebssystemen in einer Programmiersprache erstellen würden

+0

'PHP 5.5.9, Windows 8.1 x64' diese Funktion tut nichts mit dem' $ Betrag' unabhängig davon Gebietsschema. – TheFrost

+0

Und wo sind negative Zahlen? – blackmambo

+0

Hat keine Währung im negativen Format berücksichtigt :) @blackmambo –