Сегодня простыми словами и на простом примере покажу один важный момент, который зачастую пьёт много крови даже у опытных программистов.
Поговорим об операторах сравнения и типах данных. Предположим у нас есть две переменных: $x и $y. Одна из них имеет значение false, а другая представляет собой пустую строку string. Человеческий мозг устроен так, что при чтении кода мы воспринимаем оба варианта как ПУСТОТУ. Происходит это потому, что если применить к обоим переменным оператор echo, то вывода на экран не произойдёт. Проблемы же начинаются тогда, когда в коде мы пытаемся проверить, пусто ли значение или нет привычным мозгу способом через =="". Приведу пример:
$x = false; $y = (string)'';
if ($x == '') {
echo PHP_EOL.'false РАВЕН пустоте string';
} else {
echo PHP_EOL.'false НЕ РАВЕН пустоте string';
}
if ($x === '') {
echo PHP_EOL.'false РАВЕН пустоте string';
} else {
echo PHP_EOL.'false НЕ РАВЕН пустоте string';
}
if ($x !== '') {
echo PHP_EOL.'false НЕ РАВЕН пустоте string';
} else {
echo PHP_EOL.'false РАВЕН пустоте string';
}
Когда мы читаем данный код, то подсознательно ожидаем, что код трижды выведит нам строку "false РАВЕН пустоте string", однако это не так!
На самом деле мы получим вот такой ответ:
false РАВЕН пустоте string
false НЕ РАВЕН пустоте string
false НЕ РАВЕН пустоте string
Т.е так, как ожидает наш мозг, код отработает только в первом случае. Решением же данного вопроса является использование empty вместо сравнивания с "":
$x = false;
if (empty($x)) {
echo PHP_EOL.'false РАВЕН пустоте string';
} else {
echo PHP_EOL.'false НЕ РАВЕН пустоте string';
}
Помните об этой особенности, так вы сэкономите кучу времени в поисках неочевидных ошибок!