2012-04-02 3 views
6

Я читал, что money_format недоступен для окон и некоторых дистрибутивов Linux (то есть вариантов BSD 4.11). Но я хочу писать кросс-платформенную библиотеку, используя обычную функцию, когда она доступна, и используя этот workaround, когда нет, поэтому моя библиотека сможет работать на каждом веб-сервере на базе PHP.Определение кросс-платформенной функции money_format (Linux и Windows)

Есть ли какое-нибудь простое решение, чтобы проверить, доступна ли встроенная функция, и если не включать решение сверху?

+0

У вас есть готовый к использованию код, так что в чем вопрос? – kirilloid

+0

Как узнать, поддерживает ли платформа встроенную функцию? Я не хочу использовать пользовательский, когда доступен нормальный доступ ... – Karol

+3

if 'function_exists' /' is_callable' – kirilloid

ответ

11

Функция money_format() определяется только в том случае, если система имеет возможности strfmon. Например, Windows не делает этого, поэтому money_format() не определен в Windows.

Таким образом, вы можете использовать этот 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']); 

При этом вы можете написать код, который на самом деле портативный вместо того, чтобы полагаться на особенности операционной системы. Наличие функции money_format, доступной в PHP без расширения, довольно глупо. Я не понимаю, почему вы хотели бы создавать несоответствия между различными операционными системами на языке программирования.

+0

'PHP 5.5.9, Windows 8.1 x64', эта функция ничего не делает с' $ amount' независимо локали. – TheFrost

+0

И где это отрицательные числа? – blackmambo

+0

Не считался валютой в негативном формате :) @blackmambo –