belarusweb.net
© Петр Романовский Минск, 2016-2017.



belarusweb.net

Основы создания сайтов...

PHP+MySQL >>>

                          Учебник Задачник Справочник

3.6. Операторы сравнения

Для сравнения двух значений используются операторы сравнения, перечисленные в таблице 3.8. В зависимости от значений своих операндов они возвращают логические значения true или false, которые в основном применяются в таких управляющих конструкциях, как if, while или for для управления дальнейшим ходом исполнения программы.

Пример Название Результат
$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

Таблица 3.8. Операторы сравнения

Отметим, что при сравнении интерпретатором довольно часто используется операция приведения типов, при этом сравнение происходит в соответствии с таблицей 3.9. Преобразование типов не происходит только при использовании операторов строгого сравнения '===' или '!==', т.к. в этом случае кроме самих значений сравниваются еще и типы.

Тип операнда 1 Тип операнда 2 Результат
bool или null что угодно Оба операнда преобразуются в тип bool, при этом FALSE < TRUE и null<'0'
string, resource или number string, resource или number Строки и ресурсы преобразуются в числа, но при этом считается, что результатом сравнения выражения ""<"0" будет true .
object object Объекты разных классов не сравниваются, а при сравнении объектов одного класса, сравниваются их свойства (подробнее в разделе посвященном классам и объектам). Также отметим, что встроенные классы могут определять свои собственные правила сравнения.
array array Массивы с меньшим числом элементов всегда считаются меньше. Если количество элементов сравниваемых массивов равно, то идет сравнение значений одинаковых ключей. Если ключ из первого операнда не найден во втором операнде, то массивы не могут сравниваться.
object что угодно Если второй операнд логический или null, то object и null преобразуются в тип bool. В других случаях object всегда больше.
array что угодно Если второй операнд логический или null, то массив и null преобразуются в тип bool. В других случаях, если второй операнд не является object, array всегда больше.

Таблица 3.9. Правила сравнения значений различных типов

При сравнении двух строк, которые в начале строки не содержат верного формата целого или вещественного числа, они сравниваются посимвольно, начиная с первого символа. Как только интерпретатор обнаружит отличие символов или достигнет конца строки, он выдаст результат. При этом больше считается тот символ (соответственно и вся строка), который в таблице кодов идет позже, т.е. имеет большее числовое значение своего кода. А поскольку буквы нижнего регистра в таблице ASCII идут после букв верхнего регистра, то буквы нижнего регистра считаются больше букв верхнего регистра.

Что касается массивов, то порядок проверки их на равенство показан в таблице 3.10.

Пример Название Результат
$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.

Таблица 3.10. Порядок проверки массивов на равенство

Напомним, что не стоит сравнивать вещественные числа при помощи стандартных операторов из-за их ограниченной точности (смотреть). В общем случае для достижения наилучшего результата при сравнении значений одного типа, например, массивов, строк или тех же вещественных чисел, следует использовать специально предназначенные для этого функции, которых в PHP имеется достаточное количество.

Для наглядности в примере 3.11 представлен ряд операций сравнения значений различных типов.

<?php
$a='5'; 		//Присвоили строку '5'
$b='4'; 		//Присвоили строку '4'
$a>$b;  		//true, т.к. строки преобразуются в целые числа

$a=null;
$a>$b; 		//false, т.к. null преобразуется в false, а строка '4' в true
$a=='0';		//false, т.к. null<'0'
$a==''; 		//true, т.к. оба операнда преобразуются в false
$a<true; 	//true, т.к. null преобразуется в false, а false<true

'b'>'Abd'; 	//true, т.к. символ нижнего регистра больше любого символа 
			   //верхнего регистра, т.е. 'b'>'A', а значит  'b'>'Abd'
';'>':';  	//true, т.к. символ ';' расположен в таблице ASCII после символа ':'
			  
$a==[]; 		//true, т.к. один из операндов null, то оба преобразовались в тип bool,
				//и пустой массив в ходе преобразования стал значением false
[]>5; 		//true, т.к. массив больше любого значения, если оно не является объектом 
				//или не нужно сравнивать со значением типа null или bool
[2,3,'n'=>8]<[1,2,3,4]; //true, т.к. во втором массиве больше элементов

/* Для сравнения различных значений существует ряд соответствующих функций, 
которыми и нужно пользоваться */

/* Напомним, что результатом сравнения является одно из логических значений 
true или false. Соответственно, при выводе оператор echo преобразует их 
либо в строку '1', либо в пустую строку '' */
?>

Пример 3.11. Сравнение значений различных типов

Контрольные вопросы и задания

  1. Перечислите операторы сравнения. Опишите порядок сравнения разных типов данных.

Словарь новых английских слов

operator [ˈɒpəreɪtə] – оператор.
clone [kləʊn] – двойник, клон.
instance [ˈɪnst(ə)ns] – образец, пример.
or [ɔː] – или.
while [wʌɪl] – до тех пор (пока).
notice [ˈnəʊtɪs] – предупреждение, уведомление.
undefined [ʌndɪˈfʌɪnd] – неопределенный.
variable [ˈvɛːrɪəb(ə)l] – переменная.
error [ˈɛrə] – ошибка.
parse [pɑːz] – разбор, анализ.
unexpected [ʌnɪkˈspɛktɪd] – непредвиденный, внезапный.
syntax [ˈsɪntaks] – синтаксис, синтаксический.
Комментарии (0)
Петр Романовский
1. Приветствуются комментарии, которые содержат дополнения к материалу текущей страницы, а также ваши ответы на вопросы других пользователей.
2. Если вам что-то непонятно - спрашивайте, не забывая написать, что именно и с какого места.
Показаны все комментарии
Чтобы оставить свой комментарий, авторизуйтесь, пожалуйста!    
     
belarusweb.net © Петр Романовский, Минск, 2016-2017.
Связаться с автором
Наверх