В PHP,
null==0 0=="0"
Если вы объедините эти два, вы ожидаете:
null=="0"
Но это не так.
Может ли кто-нибудь объяснить это мне?
Вы должны понимать, что, поскольку PHP не является строгим при наборе текста, он часто приводит ваши переменные к другим типам в зависимости от того, какое сравнение или операция необходимы. В случае null == 0 вам сообщается, что как null, так и целое число 0 считаются ложными.
В случае null == "0" он проверяет, является ли строка "0" пустой, которой она не является. Сравнивая целое число 0 со строками типа «0» типа «0» на int для сравнения, в этом случае они равны.
Надеюсь, это поможет.
В первом случае:
null==0
null
оценивает значение false
, то же, что и 0
которое вычисляется как false
, поэтому оба значения false
и поэтому сравнение возвращает true
.
Во втором случае:
0=="0"
здесь вы сравниваете две переменные разного типа, одну – цифру и другую строку, потому что вы не используете оператор === , PHP приложил один из них к другому типу, поэтому 0, приведённый к строке, равен «0», поэтому они то же самое, если это «0», которое забрасывается на число, также отличает 0, поэтому его значение совпадает с другим значением, и поэтому это сравнение возвращает true.
В третьем случае:
null=="0"
вот такая же ситуация, оба разные типы, поэтому PHP отбрасывает один из них в тип другого, но если вы отбрасываете нуль в строку, результат равен «null», который не равен «0» , поэтому это не причина это сравнение.
==
проверяет равенство
===
проверяет тип равенства и (мы также говорим, что он «идентичен»)
Поэтому, поскольку PHP не имеет сильного типа, он автоматически присваивается наилучшим образом.
null === 0
является false
а null == 0
истинно, потому что 0
или '0'
считаются нулевым значением, а также false
. Пустое значение null == ''
также вернет true
.
Так работает PHP.
Лучшей практикой является проверка типа с использованием оператора ===
(и его отрицательного эквивалента !==
и использование только другого в особых случаях).