Проверка на 0 может давать непредсказуемые результаты!
Таблица, какие вот результаты бывают у абсолютно одинаковых условий на разных версиях PHP.
# if PHP 7.3 PHP 8.3 (0 == 'A') true false ! отличается ! (0 === 'A') false false (0 != 'A') false true ! отличается ! (0 !== 'A') true true (0) false false (! 0) true true ('0' == 'A') false false ('0' === 'A') false false ('0' != 'A') true true ('0' !== 'A') true true ('0') false false (! '0') true true
Например, если делаем intval() входящей переменной $_POST['id'] (любой конечно переменной), мы ее из строки превращаем в int и сравнение на 0, если это не строка, выдает неоднозначные результаты. Они разные в разных версиях PHP, но в данном случае именно PHP 8.3 обрабатывает условия корректно, но полагаться на это не стоит, в будущем такое поведение PHP может не сохраниться.
Чтобы точно избегать ошибок, сравнивайте одинаковые типы с двух сторон (слева и справа), приводите их к одинаковому типу при необходимости, или делайте проверку строго типа ===, а не ==.
Тестовый код, результаты которого выложены выше
Выполните этот код на разных версиях PHP и сравните результаты.
<?php // Упрощенный вариант, без стилей и лишних тегов. echo "<div><pre>"; $var = 0; if ($var == "A") { echo '(0 == \'A\') ' . " true<br>"; } else { echo '(0 == \'A\') ' . " false<br>"; } if ($var === "A") { echo '(0 === \'A\') ' . " true<br>"; } else { echo '(0 === \'A\') ' . " false<br>"; } if ($var != "A") { echo '(0 != \'A\') ' . " true<br>"; } else { echo '(0 != \'A\') ' . " false<br>"; } if ($var !== "A") { echo '(0 !== \'A\') ' . " true<br>"; } else { echo '(0 !== \'A\') ' . " false<br>"; } if ($var) { echo '(0) ' . " true<br>"; } else { echo '(0) ' . " false<br>"; } if (! $var) { echo '(! 0) ' . " true<br>"; } else { echo '(! 0) ' . " false<br>"; } echo "<br>"; $var = '0'; if ($var == "A") { echo '(\'0\' == \'A\') ' . " true<br>"; } else { echo '(\'0\' == \'A\') ' . " false<br>"; } if ($var === "A") { echo '(\'0\' === \'A\') ' . " true<br>"; } else { echo '(\'0\' === \'A\') ' . " false<br>"; } if ($var != "A") { echo '(\'0\' != \'A\') ' . " true<br>"; } else { echo '(\'0\' != \'A\') ' . " false<br>"; } if ($var !== "A") { echo '(\'0\' !== \'A\') ' . " true<br>"; } else { echo '(\'0\' !== \'A\') ' . " false<br>"; } if ($var) { echo '(\'0\') ' . " true<br>"; } else { echo '(\'0\') ' . " false<br>"; } if (! $var) { echo '(! \'0\') ' . " true<br>"; } else { echo '(! \'0\') ' . " false<br>"; } echo "</pre></div>"; ?>