Я видел следующий код, который использует 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
.