Ответ
В PHP результат сравнения false и null полностью зависит от используемого оператора сравнения из-за слабой типизации языка.
-
Нестрогое сравнение (
==или!=): Происходит приведение типов. Поскольку оба значенияfalseиnullявляются falsy (приводятся кfalseв булевом контексте), они считаются равными.var_dump(false == null); // bool(true) var_dump(false != null); // bool(false) -
Строгое сравнение (
===или!==): Проверяет и значение, и тип. Типfalse—boolean, типnull—null. Они разные, поэтому значения не равны.var_dump(false === null); // bool(false) var_dump(false !== null); // bool(true)
Практическое правило: В коде, особенно при сравнении возвращаемых значений функций (где false может означать ошибку, а null — отсутствие значения), всегда используйте строгое сравнение (===/!==). Это предотвращает трудноуловимые баги.
// Потенциально опасный код
if ($result == false) {
// Сработает и для false, и для null, и для 0, и для ''
}
// Корректный, предсказуемый код
if ($result === false) {
// Сработает ТОЛЬКО если $result имеет тип boolean и значение false
}