Я видел следующий код, который использует if ($ page! == false). Каковы различия, если я использую if ($ page)?
if($id){ // check that page exists $page=dbRow("SELECT * FROM pages WHERE id=$id"); if($page!==false){ $page_vars=json_decode($page['vars'],true); $edit=true; }
Заранее спасибо.
С $page !== false это проверяет только, имеет ли $page логический тип (т.е. true или false ), и если он равен false . if ($page) проверяет, является ли логическое представление $page ложным. Следующие значения ложны при преобразовании в booleans в PHP:
null 0 (целое число) 0.0 (поплавок) '' (пустая строка) '0' (строка, содержащая символ 0 ) array() (пустой массив) Таким образом, если $page – это любой из них, if ($page) не удастся, но if ($page !== false) пройдет.
Если вы используете if ($ page! == false), вы убедитесь, что $ page не является ложным (в этом случае, если $ page равно 0 или null не будет считаться ложным, поскольку вы принудительно проверяете тип с помощью! ==)
Если вы используете if ($ page), это означает любую вещь, кроме false, 0, NULL, пустую строку, пустой массив или любую вещь, которая вычисляется как TRUE
=== и !== сравнивается по значению и типу (строгое сравнение).
== и != Сравнивается только по значению (ослабленное сравнение).
В вашем случае значение $page!==false оценивает только true если $page не является логическим значением со значением false .
Есть некоторые фальшивые вещи, которые есть !== false , такие как NULL , 0 , array() и пустая строка. Полный список значений фальсификации приведен здесь .
!== работает, проверяя, что оба типа и значения идентичны. Таким образом, $page !== false будет true, если $ page не является логическим значением со значением false.
Напротив, if($page) приведет к выполнению блока, если $page – что-то правдоподобное (оценка TRUE). Это в основном все, кроме значений, перечисленных в приведенной выше ссылке.
Таким образом, поведение отличается от значений фальши, которые не являются точно false .