Почему ===
быстрее, чем ==
в PHP?
Поскольку оператор равенства ==
принудительно или временно преобразует тип данных, чтобы увидеть, равен ли он другому операнду, тогда как ===
(оператор идентификации) не нужно делать никаких преобразований, и, следовательно, меньше работы выполняется, что делает его более быстрым ,
===
не выполняет typecasting, поэтому 0 == '0'
оценивается как true
, но 0 === '0'
– false
.
Во-первых, === проверяет, являются ли два аргумента одного и того же типа, поэтому число 1 и строка «1» не выполняются при проверке типа перед выполнением любых сравнений. С другой стороны, == не проверяет тип первым и идет вперед и преобразует оба аргумента в один и тот же тип, а затем выполняет сравнение.
Поэтому === быстрее проверяет условие сбоя
Есть две вещи, которые следует учитывать:
Если типы операндов различны, то ==
и ===
производят разные результаты . В этом случае скорость операторов не имеет значения; имеет значение то, что дает желаемый результат.
Если типы операндов одинаковы, вы можете использовать либо ==
или ===
как оба будут давать одинаковые результаты . В этом случае скорость обоих операторов почти одинакова. Это связано с тем, что никакое преобразование типа не выполняется ни одним из операторов.
Я сравнил скорость:
$a == $b
vs $a === $b
$a
и $b
были случайными целыми числами [1, 100] И вот результаты:
$a == $b $a === $b --------- --------- 0.765770 0.762020 0.753041 0.825965 0.770631 0.783696 0.787824 0.781129 0.757506 0.796142 0.773537 0.796734 0.768171 0.767894 0.747850 0.777244 0.836462 0.826406 0.759361 0.773971 --------- --------- 0.772015 0.789120
Вы можете видеть, что скорость почти идентична.
Я действительно не знаю, если это значительно быстрее, но === в большинстве языков это сравнение прямого типа, а == будет пытаться сделать принуждение типа, если необходимо / возможно, получить совпадение.
== По сравнению с предыдущим значением ==, возникает большая ошибка преобразования типов. === сначала проверяет тип, затем переходит без необходимости преобразования любого типа.
Потому что ===
не нужно принуждать операнды к тому же типу, прежде чем сравнивать их.
Я сомневаюсь, что разница в скорости очень много. При нормальных обстоятельствах вы должны использовать любой оператор, имеющий больше смысла.
В заключение === быстрее, потому что не преобразует тип данных, чтобы увидеть, имеют ли две переменные одинаковое значение, но когда вам нужно увидеть, имеют ли две переменные одинаковое значение, вы будете использовать ==, если не указано, какие типы являются переменными , или === если важно также тип переменных.
Если результаты теста верны, то это должна быть проблема с компилятором,
Процессор будет делать все, что ему говорят, в такт
Если это будет меньше, то это будет быстрее сделать
Дополнение:
Хорошо, действительно, если компилятор уже создал множество машинного кода для обработки, то, если он уже добавил множество элементов, чтобы справиться с тем, какой тип данных нужно сравнивать, то удаление одного «младшего» IF не будет сильно изменять скорости вообще.
Если кто-то еще это читает, то мне интересно в более широком обсуждении.
Фил