Типы данных и конструкция if-else в PHP

При использовании конструкции if можно сравнивать и строки. Для примера пусть в переменной $test хранится какая-то строка, например такая:

<?php $test = 'abc'; ?>

Давайте проверим, равно ли содержимое переменной $test строке 'abc':

<?php $test = 'abc'; if ($test == 'abc') { echo '+'; // сработает это, так как переменная равна 'abc' } else { echo '-'; } ?>

Числа в кавычках

Как вы знаете, число в кавычках представляет собой строку. Например, '3' - это строка. Однако, при сравнении таких строк с настоящими числами PHP считает, что строка в кавычках равна такому же числу.

Давайте для примера сравним строку '3' и число 3:

<?php if ('3' == 3) { echo '+'; // сработает это - значения равны } else { echo '-'; } ?>

Равенство по значению и типу

Пусть вы хотите сравнивать так, чтобы число в кавычках не было равно такому же числу без кавычек. Говоря другими словами, вы хотите сравнивать так, чтобы сравнение было не только по значению, но и по типу данных. Для этого вместо оператора == следует использовать оператор ===.

Смотрите пример:

<?php if ('3' === 3) { echo '+'; } else { echo '-'; // сработает это, тк значения не равны по типу } ?>

А вот при сравнении двух строк '3' на экран выведется '+':

<?php if ('3' === '3') { echo '+'; // сработает это } else { echo '-'; } ?>

Так же, как и при сравнении чисел:

<?php if (3 === 3) { echo '+'; // сработает это } else { echo '-'; } ?>

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

<?php if (2 === 3) { echo '+'; } else { echo '-'; // сработает это } ?>

Не запуская код, определите, что выведется на экран:

<?php $test1 = '3'; $test2 = '3'; if ($test1 == $test2) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test1 = '3'; $test2 = '3'; if ($test1 === $test2) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test1 = 3; $test2 = '3'; if ($test1 == $test2) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test1 = 3; $test2 = '3'; if ($test1 === $test2) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test1 = 3; $test2 = 3; if ($test1 === $test2) { echo '+'; } else { echo '-'; } ?>

Неравенство по значению и типу

Кроме оператора != существует также оператор !==, учитывающий тип при сравнении. Давайте рассмотрим различия между ними на примерах.

Пусть с помощью оператора != сравниваются два числа 3. Данный оператор сравнивает значения на то, что они НЕ равны. Так как наши значения как раз-таки равны, то на экран выведется '-':

<?php if (3 != 3) { echo '+'; } else { echo '-'; // сработает это, так как значения равны } ?>

Пусть теперь одно из наших значений будет в кавычках. В этом случае оператор != все равно посчитает их равными (так как совпадает значение, а тип не важен для данного оператора) и опять выведет '-':

<?php if ('3' != 3) { echo '+'; } else { echo '-'; // сработает это, так как значения равны } ?>

Давайте теперь сравним два числа 3 с помощью оператора !==. Он также посчитает их равными и выведет '-':

<?php if (3 !== 3) { echo '+'; } else { echo '-'; // сработает это, так как значения равны } ?>

А вот если теперь одну из троек взять в кавычки, то оператор !== посчитает наши тройки неравными, так как, хотя значения их и совпадают, но у них разный тип:

<?php if ('3' !== 3) { echo '+'; // сработает это, так как значения НЕ равны } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test1 = '3'; $test2 = '3'; if ($test1 != $test2) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test1 = '3'; $test2 = '3'; if ($test1 !== $test2) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test1 = 3; $test2 = '3'; if ($test1 != $test2) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test1 = 3; $test2 = '3'; if ($test1 !== $test2) { echo '+'; } else { echo '-'; } ?>

Не запуская код, определите, что выведется на экран:

<?php $test1 = 3; $test2 = 2; if ($test1 !== $test2) { echo '+'; } else { echo '-'; } ?>

Нюансы

Обратите внимание на следующий код:

<?php if (0 == '') { echo '+'; // сработает это } else { echo '-'; } ?>

И на следующий:

<?php if (0 == '0') { echo '+'; // сработает это } else { echo '-'; } ?>

Какое сравнение использовать?

В настоящее время в PHP общепринято везде стараться использовать строгое сравнение. Считается, что в этом случае код менее подвержен ошибкам.