Достаточно часто появляется такая проблема в PHP , решением которой является использование оператора эквивалентности . Дело в том, что PHP любит преобразовывать типы, и, с одной стороны, это хорошо. Например, при сложении числа и строки, строка преобразуется в число и складывается. В результате, всё хорошо. Но бываю...

Оператор эквивалентности PHP

Достаточно часто появляется такая проблема в PHP, решением которой является использование оператора эквивалентности. Дело в том, что PHP любит преобразовывать типы, и, с одной стороны, это хорошо. Например, при сложении числа и строки, строка преобразуется в число и складывается. В результате, всё хорошо. Но бывают случаи, когда такое преобразование плачевно. Пример? Читайте далее.

Допустим, у Вас есть две переменные:

<?php
  $var_1 = 0;
  $var_2 = "";
  if ($var_1 == $var_2) echo "Переменные равны";
?>

Как Вы и догадались, PHP нам выведет, что переменные равны. Но разве 0 равен пустой строке? Разумеется, нет. А почему так произошло? Всё достаточно просто: 0 для PHP - это false (другие числа - это true), а пустая строка - это тоже false (если она не пустая, то PHP считает её true). В итоге, у нас оба операнда стали false, и, очевидно, что они равны. То есть в данном примере мы явно видим, что преобразование сработало неверно. И поверьте моему опыту, данных засадных мест встречается очень много.

Теперь встаёт вопрос: "Как бороться с этим?". Как Вы догадались из названия статьи, с помощью оператора эквивалентности PHP, который обозначается так "===". Данный оператор сверяет не только значения (как делает оператор сравнения, используемый нами выше), но и типы. То есть чтобы проверка эквивалентности выдала true необходимо совпадение не только значений, но и типов. Давайте проверим это:

<?php
  $var_1 = 0;
  $var_2 = "";
  if ($var_1 === $var_2) echo "Переменные равны";
  else echo "Переменные не равны";
?>

Результатом выполнения скрипта будет вывод строки: "Переменные не равны", чего мы с Вами и добивались. То есть значения переменных равны, но их типы не совпадают (одна переменная integer, а другая string), поэтому оператор эквивалентности вернул false и отправил нас в блок else, где мы и вывели соответствующую строку.

Разумеется, у Вас впереди будет ещё много ошибок, связанных с преобразованием типов, так как подобных нюансов действительно очень много, но со временем Вы научитесь использовать оператор эквивалентности, и ошибок определённо станет меньше.