Когда вы предоставляете оператору PHP ==
смесь числовых и строковых операндов, PHP будет пытаться преобразовать строку в соответствующий числовой тип, что является частью процесса, который он называет " type juggling ". В этом случае строка "TEST"
преобразуется в целое число 0
, поэтому ваш тест эквивалентен 0 == 0
, что является истинным.
PHP предоставляет оператор ===
для проверки, равны ли значения и тип обоих операндов. Таким образом, в то время как 0 == "TEST"
будет преобразовываться в true
, 0 === "TEST"
не будет и не будет 0 === "0"
или 0 === 0.0
.
Обратите внимание, что когда PHP преобразует строку в число, он пытается проанализировать строку на предмет допустимого числа. См. intval
для получения дополнительной информации о том, как это происходит. Если бы вы написали 0 == "1TEST"
, выражение изменилось бы на 0 == 1
или false
.
Во втором примере, 1 == "TEST"
, строка "TEST"
снова преобразуется в целое число, в результате чего получается 1 == 0
, что неверно.
В последних двух примерах используются сравнения строк. Там нет конверсии, и результаты говорят сами за себя.
PHP предоставляет подробный анализ того, как переменные различного типа сравниваются на равенство.