Проверка на 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>";
?>