2012-04-02 13 views
6

Ho letto che money_format non è disponibile su Windows e su alcune distribuzioni Linux (cioè varianti di BSD 4.11). Ma voglio scrivere una libreria multipiattaforma usando la funzione normale, quando disponibile e usando questo workaround quando no, così la mia libreria sarà in grado di girare su ogni web server basato su PHP.Definizione della funzione money_format cross-platform (Linux e Windows)

Esiste una soluzione semplice per verificare se la funzione incorporata è disponibile e se non includere la soluzione dall'alto?

+0

Hai un codice pronto all'uso, quindi qual è la domanda? – kirilloid

+0

Come posso sapere se la piattaforma supporta la funzione integrata? Non voglio usare uno personalizzato, quando è disponibile la normale ... – Karol

+3

se 'function_exists' /' is_callable' – kirilloid

risposta

11

La funzione money_format() è definita solo se il sistema ha capacità strfmon. Ad esempio, Windows non lo fa, quindi money_format() non è definito in Windows.

modo da poter utilizzare questo codice php:

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']); 

Con questo è possibile scrivere codice che in realtà è portatile, invece di basarsi su funzionalità del sistema operativo. Avere la funzione money_format disponibile in PHP senza che sia un'estensione è piuttosto stupida. Non vedo perché vorresti creare inconsistenze come questa tra diversi sistemi operativi in ​​un linguaggio di programmazione

+0

'PHP 5.5.9, Windows 8.1 x64' quella funzione non fa nulla con l'importo' $' a prescindere di locale. – TheFrost

+0

E dove tiene conto dei numeri negativi? – blackmambo

+0

Non considerato valuta in formato negativo :) @blackmambo –