Преобразование типов с помощью оператора ==
Оператор == - это типизированное сравнение. Он преобразует оба в общий тип и сравнивает их. Способ преобразования строк в целые числа описан здесь .
Обратите внимание, что страница , на которую вы ссылались , не противоречит этому. Проверьте вторую таблицу, где написано, что сравнение целого числа 0
со строкой "php"
с использованием ==
должно быть истинным.
В результате получается, что строка преобразуется в целое число, а нечисловые строки (строки, которые не содержат или начинаются с числа) преобразуются в 0
.
Числовые и нечисловые строки
Строка, которая состоит из числа или начинается с числа, считается числовой строкой . Если в строке есть другие символы после этого числа, они игнорируются.
Если строка начинается с символа, который нельзя интерпретировать как часть числа, то это нечисловая строка и преобразуется в 0
. Это не означает, что числовая строка должна начинаться с цифры (0-9) - например, "-1"
является числовой строкой, поскольку знак минус в этом случае является частью числа.
Так, например, ваша строка "d85d1d81b25614a3504a3d5601a9cb2e"
не начинается с числа, поэтому она будет преобразована в 0
. Но ваша вторая строка "3581169b064f71be1630b321d3ca318f"
будет преобразована в целое число 3581169
. Вот почему ваш второй тест не работает так же.
Что делать
Вы, вероятно, хотите:
if ($test1 === "0")
Обратите внимание на использование тройных равных вместо двойных равных. Это гарантирует, что то, что вы сравниваете, является строкой, содержащей только цифру ноль, и предотвращает любое преобразование типов.