Оператор сравнения «==» в путанице PHP

В 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.

Лучшей практикой является проверка типа с использованием оператора === (и его отрицательного эквивалента !== и использование только другого в особых случаях).