Операторы сравнения в PHP
Для чего нужны операторы сравнения?
Операторы сравнения позволяют сравнивать между собой два значения.
Синтаксис операторов сравнения
Синтаксис всех операторов сравнения представлен в таблице ниже.
| Пример | Название | Результат |
| $a == $b | Равно | TRUE если $a равно $b после преобразования типов. |
| $a === $b | Тождественно равно | TRUE если $a равно $b и имеет тот же тип. |
| $a != $b | Не равно | TRUE если $a не равно $b после преобразования типов. |
| $a <> $b | Не равно | TRUE если $a не равно $b после преобразования типов. |
| $a !== $b | Тождественно не равно | TRUE если $a не равно $b или они разных типов. |
| $a < $b | Меньше | TRUE если $a строго меньше $b. |
| $a > $b | Больше | TRUE если $a строго больше $b. |
| $a <= $b | Меньше или равно | TRUE если $a меньше или равно $b. |
| $a >= $b | Больше или равно | TRUE если $a больше или равно $b. |
Важный момент: если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Эти правила также распространяются на оператор switch.
Так же преобразование типов не происходит при использовании === или !== так как в этом случае кроме самих значений сравниваются еще и типы.
Сравнение различных типов
Для различных типов сравнение происходит в соответствии со следующей таблицей (по порядку).
| Тип операнда 1 | Тип операнда 2 | Результат |
| null или string | string | NULL преобразуется в «», числовое или лексическое сравнение |
| bool или null | что угодно | Оба операнда преобразуются в bool, FALSE < TRUE |
| object | object | Встроенные классы могут определять свои собственные правила сравнения, объекты разных классов не сравниваются, объекты одного класса — сравниваются свойства тем же способом, что и в массивах (PHP 4), в PHP 5 есть свое собственное объяснение |
| string, resource или number | string, resource или number | Строки и ресурсы переводятся в числа, обычная математика |
| array | array | Массивы с меньшим числом элементов считаются меньше, если ключ из первого операнда не найден во втором операнде — массивы не могут сравниваться, иначе идет сравнение соответствующих значений (смотри пример ниже) |
| object | что угодно | object всегда больше |
| array | что угодно | array всегда больше |
Сравнение чисел с плавающей точкой
Из-за особого внутреннего представления float, не нужно проверять на равенство два float-числа.
Тернарный оператор
Тернарный оператор ? является выражением и трактуется не как переменная, а как результат выражения. Это важно знать, если вы хотите вернуть переменную по ссылке. Выражение return $var == 42 ? $a : $b; не будет работать в функции, возвращающей значение по ссылке, а в более поздних версиях PHP также будет выдано предупреждение.
Важный момент: избегайте «нагромождения» тернарных выражений. Поведение PHP не очевидно при использовании нескольких тернарных операторов в одном выражении.
Пример использования тернарного оператора
<?php
// Пример использования тернарного оператора
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
// Приведенный выше код аналогичен следующему блоку с использованием if/else
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>