Альтернатива перечислимым типам в PHP5?

Intl.numberformat

Javascript имеет средство форматирования чисел (часть Интернационализации API).

// Create our number formatter.
var formatter = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',
});

formatter.format(2500); /* $2,500.00 */

JS fiddle

Используйте undefined вместо первого аргумента (в примере 'en-US'), чтобы использовать системный языковой стандарт (пользовательский языковой стандарт в случае, если код выполняется в браузере).

Intl.NumberFormat vs Number.prototype.toLocaleString

Последнее замечание, сравнивающее это со старым. toLocaleString. Они оба предлагают по существу одинаковую функциональность. Однако toLocaleString в его более старых версиях (pre-Intl) фактически не поддерживает локали : он использует системную локаль. Поэтому убедитесь, что вы используете правильную версию ( MDN предлагает проверить наличие Intl ). Кроме того, производительность обоих одинакова для одного элемента , но если у вас много чисел для форматирования, использование Intl.NumberFormat происходит в ~ 70 раз быстрее. Вот как использовать toLocaleString:

(2500).toLocaleString('en-US', {
  style: 'currency',
  currency: 'USD',
}); /* $2,500.00 */

Некоторые заметки о поддержке браузера

  • Поддержка браузера больше не является проблемой в настоящее время с поддержкой 97% в США / ЕС
  • Для других частей света (поддерживается 92%) самыми крупными нарушителями в плане поддержки являются UC Mobile ( держаться подальше от этого ) и Opera Mini (покалеченные дизайном)
  • Существует прокладка для поддержки его в более старых браузерах
  • Посмотрите CanIUse для получения дополнительной информации
9
задан Charles 23 December 2012 в 21:50
поделиться

3 ответа

Очень распространенным соглашением является использование констант классов в PHP.

например

class Message
{
    const HOT  = 0;
    const WARM = 1;
    const COLD = 2;
}
16
ответ дан 4 December 2019 в 09:37
поделиться

Я также использую для этого класс с константами. Я добавляю следующее

  • , чтобы сделать класс абстрактным, чтобы никто не пытался его создать.
  • добавляю статический массив, который сопоставляет константы со строками для печати удобных сообщений
  • реализует статический метод __toString () для выполнения предыдущий

     абстрактный класс Message {
     const HOT = 0;
     const WARM = 1;
     const COLD = 2;
    
     общедоступные статические $ перечисления = массив (
     self :: HOT => "горячий",
     self :: WARM => "теплый",
     self :: COLD => "холодный"
     );
    
     public static __toString ($ enum) {
     return self :: $ enums [$ enum];
     }
    }
    

Я также могу использовать перечисления Message :: $ для проверки переменных:

if (!array_key_exists($is_it_valid, Message::$enums)
5
ответ дан 4 December 2019 в 09:37
поделиться

Вы можете использовать константы классов :

class Message
{
    const hot = 0;
    const warm = 1;
    const cold = 2;
}

foo(Message::hot);
foo(Message::warm);
foo(Message::cold);
1
ответ дан 4 December 2019 в 09:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: