Операторы сравнения, как это видно из их названия, позволяют
сравнивать между собой два значения. Возможно вам будет
интересно также ознакомиться с разделом Сравнение типов,
в котором приведено большое количество соответствующих примеров.
Операторы сравнения
Пример
Название
Результат
$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.
Преобразование типов не происходит при использовании === или !==
так как в этом случае кроме самих значений сравниваются еще и типы.
Встроенные классы могут определять свои собственные правила сравнения,
объекты разных классов не сравниваются, объекты одного класса - сравниваются свойства
тем же способом, что и в массивах (PHP 4), в PHP 5 есть свое собственное объяснение
Массивы с меньшим числом элементов считаются меньше,
если ключ из первого операнда не найден во втором операнде
- массивы не могут сравниваться, иначе идет сравнение соответствующих
значений (смотри пример ниже)
Из-за особого внутреннего представления float, не нужно
проверять на равенство два float-числа.
Для более подробной информации смотрите документацию по типу float.
Тернарный оператор
Еще одним условным оператором является тернарный оператор "?:".
Пример #2 Присваивание значения по умолчанию
<?php // Пример использования тернарного оператора $action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
// Приведенный выше код аналогичен следующему блоку с использованием if/else if (empty($_POST['action'])) { $action = 'default'; } else { $action = $_POST['action']; }
?>
Выражение (expr1) ? (expr2) : (expr3)
интерпретируется как expr2, если
expr1 имеет значение TRUE, или как
expr3 если
expr1 имеет значение FALSE.
Начиная с версии PHP 5.3 также стало возможным не писать среднюю часть
тернарного оператора. Выражение expr1 ?: expr3
возвращает expr1 если expr1
имеет значение TRUE, и expr3 в другом случае.
Замечание:
Пожалуйста учтите, что тернарный оператор является выражением
и трактуется не как переменная, а как результат выражения. Это важно знать,
если вы хотите вернуть переменную по ссылке.
Выражение return $var == 42 ? $a : $b; не будет
работать в функции, возвращающей значение по ссылке, а в более поздних
версиях PHP также будет выдано предупреждение.
Замечание:
Рекомендуется избегать "нагромождения" тернарных выражений.
Поведение PHP неочевидно при использовании нескольких тернарных операторов
в одном выражении:
Пример #3 Неочевидное поведение тернарного оператора
<?php // на первый взгляд, следующий код должен вывести 'true' echo (true?'true':false?'t':'f');
// однако, он выводит 't' // это происходит потому, что тернарные выражения вычисляются слева направо
// это намного более очевидная версия вышеприведенного кода echo ((true ? 'true' : false) ? 't' : 'f');
// здесь вы можете видеть, что первое выражение вычисляется в 'true', которое // в свою очередь вычисляется в (bool)true, таким образом возвращая истинную ветвь // второго тернарного выражения. ?>