В 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.
Лучшей практикой является проверка типа с использованием оператора === (и его отрицательного эквивалента !== и использование только другого в особых случаях).