Константы PHP: преимущества/Недостатки

То, что вы делаете, совершенно неверно.

Ваша проблема не в том, что вы получаете разные результаты (2,36 против 2,47). Ваша проблема в том, что, по крайней мере, один из этих результатов, и, вероятно, оба, имеют серьезные ошибки. Ваши результаты для Windows и Android не просто отличаются, они НЕПРАВИЛЬНЫ. (По крайней мере, один из них, и вы не знаете, какой из них).

Узнайте, почему вы получаете эти огромные ошибки, и измените свои алгоритмы, чтобы не увеличивать крошечные ошибки округления. Или у вас есть проблема, которая по своей сути хаотична, и в этом случае разница между результатами на самом деле очень полезная информация.

То, что вы пытаетесь, просто увеличивает ошибки округления в 256 раз, и если два разных результата заканчиваются шестнадцатеричным .... 1ff и .... 200, то вы меняете их на .... 180 и .... 280, так что даже разница между слегка отличающимися числами может возрасти в 256 раз.

И на бигендовской машине твой код просто перейдет в kaboom !!!

8
задан Wilco 29 October 2008 в 18:43
поделиться

5 ответов

Различие в производительности будет незначительно, если Вы не сохраните многие из них. Я записал бы toString() метод более кратко:

$strings = array
(
    self::USER_TYPE_ADMIN => 'admin',
    self::USER_TYPE_USER => 'user',
);

if (!isset($strings[$type]))
    return 'unknown';

return $strings[$type];

Кроме того, Вы могли сделать $strings массив a static.

8
ответ дан 5 December 2019 в 17:43
поделиться

Я буду честен, я не знаю, существует ли производительность "хит" какого-либо вида, когда Вы определяете свои константы исходно как строки - но если существует один вообще, я готов держать пари, что это является настолько маленьким, было бы трудно иметь размеры.

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

4
ответ дан 5 December 2019 в 17:43
поделиться

Я думаю, что строковые константы являются лучшим выбором в этом случае. Код выглядит лучше.

Конечно, если Вы должны продержаться бит производительности, используйте целочисленные константы. Но только после того, как Вы проверяете с профилировщиком, что сравнения строк являются узким местом. Так или иначе в большинстве приложений существуют намного более дорогие вещи, как доступ к базе данных и т.д.

1
ответ дан 5 December 2019 в 17:43
поделиться

Вместо того, чтобы использовать целые числа константы я обычно просто иду со строками, если я должен распечатать их. Таким образом, я сделал бы что-то как $foo = new Foo('guest');. Я могу все еще проверить вход в конструкторе, и я могу повысить его каждый раз, когда мне нужен он.

0
ответ дан 5 December 2019 в 17:43
поделиться

В примере Вы пишете, что могли отбросить все методы и сделать класс статичным, и Вы создадите Ваш сам Перечислитель. Как это:

class Enumeration{
  public static const One=1;
  public static const Two=2;
  public static const Three=3;
}

Еще один удобный способ использовать константы состоит в том, чтобы использовать их в качестве конфигурации приложения. Они - намного более быстрая производительность, мудрая затем парсинг XML-файла для конфигурации.

-3
ответ дан 5 December 2019 в 17:43
поделиться
Другие вопросы по тегам:

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