Цикл for
повторяет его 10000000 раз тот же сценарий:
if (isset ($ item))
2.25843787193 if ($ item_exists == true)
6.25483512878 if ($ item_exists === true)
5.99481105804 Итак, я могу сказать, что isset
наверняка быстрее.
Чтобы ответить, скорее всего, isset() и "===" будут самыми быстрыми, так как они проверяют только одно условие, а == проверяет несколько условий и будет медленнее. Я не тестировал это официально, но думаю, что это правильно. @Pekka также прав, если вы хотите оптимизировать, то это действительно не то место, где вы это сделаете. Поскольку, вероятно, потребуются тысячи вызовов, чтобы заметить разницу в несколько миллисекунд.
В этом случае нужно спрашивать не о производительности, а о корректности. Потому что isset
ведет себя не так, как булево преобразование и сравнение с true (см. таблицу сравнения типов). Особенно по-разному обрабатываются значения ""
(пустая строка), array()
(пустой массив), false
, 0
и "0"
(0
как строка).
Есть только один способ оптимизации вашего кода, называемый «профилированием». Сначала вы узнали , какая часть кода требует оптимизации. И только потом запускайте тесты, находите решения и т. Д.
"Круговой" подход из ответа Маркса тоже ужасен. Если вы хотите проверить, действительно ли какой-либо код имеет значение, протестируйте его с точки зрения браузера, используя тестовую утилиту Apache .
Я уверен, что разница в производительности есть; я уверен, что это было где-то проверено; но я также уверен, что для реальных целей это не имеет никакого значения. Любой достижимый выигрыш здесь исчисляется миллисекундами, и гораздо, гораздо важнее читабельность кода и отсутствие предупреждений (которые стоят производительности, независимо от того, выведены они или нет).
Вам, вероятно, понадобится isset
, если вы не можете быть уверены, что он установлен в момент обращения к нему. Сравнение с сохранением типа ===
не должно быть необходимым, если $item_exists
всегда булево, но и вреда оно не принесет. Так что в зависимости от вашей ситуации, вам может понадобиться
if ((isset($item)) and ($item_exists === true))