Скорость PHP: что быстрее? если (isset ($foo)) ИЛИ если ($foo == верный) [закрытый]

9
задан Peter Mortensen 5 December 2010 в 13:49
поделиться

5 ответов

Цикл for повторяет его 10000000 раз тот же сценарий:

  • if (isset ($ item)) 2.25843787193
  • if ($ item_exists == true) 6.25483512878
  • if ($ item_exists === true) 5.99481105804

Итак, я могу сказать, что isset наверняка быстрее.

27
ответ дан 4 December 2019 в 06:09
поделиться

Чтобы ответить, скорее всего, isset() и "===" будут самыми быстрыми, так как они проверяют только одно условие, а == проверяет несколько условий и будет медленнее. Я не тестировал это официально, но думаю, что это правильно. @Pekka также прав, если вы хотите оптимизировать, то это действительно не то место, где вы это сделаете. Поскольку, вероятно, потребуются тысячи вызовов, чтобы заметить разницу в несколько миллисекунд.

1
ответ дан 4 December 2019 в 06:09
поделиться

В этом случае нужно спрашивать не о производительности, а о корректности. Потому что isset ведет себя не так, как булево преобразование и сравнение с true (см. таблицу сравнения типов). Особенно по-разному обрабатываются значения "" (пустая строка), array() (пустой массив), false, 0 и "0" (0 как строка).

11
ответ дан 4 December 2019 в 06:09
поделиться

Есть только один способ оптимизации вашего кода, называемый «профилированием». Сначала вы узнали , какая часть кода требует оптимизации. И только потом запускайте тесты, находите решения и т. Д.

"Круговой" подход из ответа Маркса тоже ужасен. Если вы хотите проверить, действительно ли какой-либо код имеет значение, протестируйте его с точки зрения браузера, используя тестовую утилиту Apache .

-1
ответ дан 4 December 2019 в 06:09
поделиться

Я уверен, что разница в производительности есть; я уверен, что это было где-то проверено; но я также уверен, что для реальных целей это не имеет никакого значения. Любой достижимый выигрыш здесь исчисляется миллисекундами, и гораздо, гораздо важнее читабельность кода и отсутствие предупреждений (которые стоят производительности, независимо от того, выведены они или нет).

Вам, вероятно, понадобится isset, если вы не можете быть уверены, что он установлен в момент обращения к нему. Сравнение с сохранением типа === не должно быть необходимым, если $item_exists всегда булево, но и вреда оно не принесет. Так что в зависимости от вашей ситуации, вам может понадобиться

if ((isset($item)) and ($item_exists === true))
7
ответ дан 4 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

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