! = и! == оба не всегда работают?

В нескольких шаблонах wp я использую !== в инструкции IF, но я обнаружил, что этот код не работает в 1 шаблоне. Я изменил его на != И теперь он работает. Мой вопрос – это то же самое, что и операторы if, а почему нет !== работают в этом конкретном шаблоне?

Есть идеи по этому поводу?

Должен ли я изменить все !== to != ?

Конкретный оператор if, о котором я говорю, (так! == не работает в приведенном ниже выражении, но! = Is)

 $homefeatured = get_post_meta( $listing->ID, 'featured-home', true ); $catfeatured = get_post_meta( $listing->ID, 'featured-cat', true ); if (!empty($plans) && $plan['ID'] != 104 || $plan['ID'] ==104 && $homefeatured !=1 || $plan['ID'] ==104 && $catfeatured !=1) 

На самом деле это не проблема WordPress, а чистый PHP.

  • != сравнивает два значения и возвращает true, когда два значения не похожи друг на друга. 0 != '0' вернет false, потому что значения похожи друг на друга, одно из которых является целым значением 0 а другое – строковым значением 0

  • !== сравниваем два значения и возвращаем true, если два значения не идентичны. 0 != '0' вернет true, потому что два значения не идентичны. 0 – целое число, а '0' – строка, поэтому они явно не идентичны. Это так же, как яблоко, зеленое яблоко не идентично красному яблоку из-за цвета

В любом состоянии вам нужно знать, какое значение вам потребуется для сравнения. В идеале вы хотели бы выполнять строгие сравнения, то есть !== и === , но для этого вам нужно будет точно знать, что вы цените, и какого рода.

Как я уже показал, 0 может быть строкой или целым числом. Если вы собираетесь принимать 0 как целое число или строку, вы должны использовать менее строгие правила ( != Или == ). Если вам просто нужно принять 0 как целое число ИЛИ строку, то вы должны использовать строгие правила ( !== или === )

РЕДАКТИРОВАТЬ

Для правил stict вы всегда можете указать значение для того, что вам нужно, перед сравнением, например, вы можете применить строковое значение от 0 до целого числа, а затем провести сопоставление между двумя значениями, поэтому, короче говоря, 0 !== (int) '0' должно возвращать значение false, так как значения будут идентичны, так как '0' станет 0 при приведении к целочисленному значению