Равен или больше php
В PHP мы можем использовать различные операторы: арифметические, логические и т.д. Рассмотрим каждый тип операций.
Арифметические операции
- + (операция сложения) Например, $a + 5
- — (операция вычитания) Например, $a — 5
- * (умножение) Например, $a * 5
- / (деление) Например, $a / 5
- % (получение остатка от деления) Например:
$a = 8 + 2; // 10, сложение $a = 8 - 2; // 6, вычитание $a = 8 * 2; // 16, умножение $a = 8 / 2; // 4, деление $a = 8 % 2; // 0, деление по модулю $a = 8 ** 2; // 64, возведение в степень
Инкремент и декремент
Отдельно следует сказать операции инкремента и декремента , которые также являются арифметическими операциями, но производятся над одним операндом.
Инкремент — операция ++ увеличивает число на единицу. Например, ++$a
Есть два типа инкремента: префиксный инкремент ( ++$a ) и постфиксный ( $a++ ). Важно понимать разницу между этими операциями. Рассмотрим сначала префиксный инкремент:
$a = 12; $b = ++$a; // $b равно 13 echo "a = $a b = $b";
Здесь сначала к значению переменной $a прибавляется единица, а затем ее значение приравнивается переменной $b.
Теперь посмотрим, что будет в случае с постфиксным инкрементом:
$a = 12; $b = $a++; // $b равно 12 echo "a = $a b = $b";
Здесь сначала значение переменной $a передается переменной $b, а затем происходило увеличение значения переменной $a.
Декремент — операция — представляет уменьшение значения на единицу. Она аналогично инкременту бывает префиксной и постфиксной и работает аналогично. Например, префиксный декремент:
$a = 12; $b = --$a; // $b равно 11 echo "a = $a b = $b";
Сначала значение переменной $a уменьшается на единицу, а затем ее значение приравнивается переменной $b.
$a = 12; $b = $a--; // $b равно 12 echo "a = $a b = $b";
Здесь же сначала значение переменной $a передается переменной $b и только после этого уменьшается на единицу.
Объединение строк
Для объединения строк используется оператор «точка». Например, соединим несколько строк:
$a="Привет, "; $b=" мир"; echo $a . " " . $b . "!"; // Привет мир!
Если переменные представляют не строки, а другие типы, например, числа, то их значения преобразуются в строки и затем также происходит операция объединения строк.
Операции сравнения
Операции сравнения, как правило, применяются в условных конструкциях, когда надо сравнивать два значения, и в зависимости от результата сравнения выполнить некоторые действия. Имеются следующие операции сравнения.
- == Оператор равенства сравнивает два значения, и если они равны, возвращает true, иначе возвращает false: $a == 5
- === Оператор тождественности также сравнивает два значения, и если они равны, возвращает true, иначе возвращает false: $a === 5
- != Сравнивает два значения, и если они не равны, возвращает true, иначе возвращает false: $a != 5
- !== Сравнивает два значения, и если они не равны, возвращает true, иначе возвращает false: $a !== 5
- > Сравнивает два значения, и если первое больше второго, то возвращает true, иначе возвращает false: $a > 5
- < Сравнивает два значения, и если первое меньше второго, то возвращает true, иначе возвращает false: $a < 5
- >= Сравнивает два значения, и если первое больше или равно второму, то возвращает true, иначе возвращает false: $a >= 5
Оператор равенства и тождественности
Оба оператора сравнивают два выражения и возвращают true, если выражения равны. Но между ними есть различия. Если в операции равенства принимают два значения разных типов, то они приводятся к одному — тому, который интерпретатор найдет оптимальным. Например:
$a = (2 == "2"); // true (значения равны) $b = (2 === "2"); // false (значения представляют разные типы)
Строка «2» по сути представляет то же значение, что и число 2, оператор сравнения возвратит true . Однако они представляют разные типы, поэтому оператор тождественности возвратит false
Аналогично работают операторы неравенства != и !== .
$a = (2 != "2"); // false, так как значения равны $b = (2 !== "2"); // true, так как значения представляют разные типы
Оператор
- 0, если оба значения равны
- 1, если значение слева больше, чем значение справа
- –1, если значение слева меньше, чем значение справа
$a = 2 2; // 0 (эквивалентно 2 == 2) $b = 3 2; // 1 (эквивалентно 3 > 2) $c = 1 2; // -1 (эквивалентно 1 < 2) echo "a=$a b=$b c=$c"; // a=0 b=1 c=-1
Логические операции
Логические операции обычно применяются для объединения результатов двух операций сравнения. Например, нам надо выполнить определенное действие, если истинны будут несколько условий. Имеются следующие логические операции:
- && Возвращает true, если обе операции сравнения возвращают true, иначе возвращает false: $a && $b
- and Аналогично операции && : $a and $b
- || Возвращает true, если хотя бы одна операция сравнения возвращают true, иначе возвращает false: $a || $b
- or Аналогично операции || : $a or $b
- ! Возвращает true, если операция сравнения возвращает false: !$a
- xor Возвращает true, если только одно из значений равно true. Если оба равны true или ни одно из них не равно true, возвращает false: $a xor $b
Примеры логических операций:
$a = (true && false); // false // аналогично $a = (true and false); // false $b = (true || false); // true // аналогично следующей операции $b = (true or false); // true $c = !true; // false
Отдельно примеры с операцией xor :
$a = (true xor true); // false $b = (false xor true); // true $c = (false xor false); // false
Поразрядные операции
Поразрядные операции производятся над отдельными разрядными или битами числа. Числа рассматриваются в двоичном представлении, например, 2 в двоичном представлении 010, число 7 - 111.
- & (логическое умножение) Умножение производится поразрядно, и если у обоих операндов значения разрядов равно 1, то операция возвращает 1, иначе возвращается число 0. Например:
$a = 4; //100 $b = 5; //101 echo $a & $b; // равно 4 - 100
$a = 4; //100 $b = 5; //101 echo $a | $b; // равно 5 - 101
$a = 5 ^ 4; // 101^100=001 - в десятичой системе 1 $b = 7 ^ 4; // 111^100=011 - в десятичой системе 3
$a = 4; //00000100 $b = ~$a; //11111011 -5 echo $b; // равно -5
Операции присваивания
- = Приравнивает переменной определенное значение: $a = 5
- += Сложение с последующим присвоением результата. Например:
$a=12; $a += 5; echo $a; // равно 17
$a=12; $a *= 5; echo $a; // равно 60
$a=12; $a /= 5; echo $a; // равно 2.4
$a=12; $a .= 5; echo $a; // равно 125 // идентично $b="12"; $b .="5"; // равно 125
$a=8; $a **= 2; echo $a; // равно 64 (8 в степени 2)
Приоритет операций
Если одно выражение содержит несколько разных операций, то при выполнении выражения учитывается приоритет операций. Сначала выполняются операции с большим приоритетом и в конце с меньшим приоритетом.
Приоритет операций можно описать следующей таблицей:
Операторы сравнения
Операторы сравнения, как это видно из их названия, позволяют сравнивать между собой два значения. Возможно вам будет интересно также ознакомиться с разделом Сравнение типов, в котором приведено большое количество соответствующих примеров.
Пример | Название | Результат |
---|---|---|
$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 | Меньше или равно | TRUE если $a меньше или равно $b . |
$a >= $b | Больше или равно | TRUE если $a больше или равно $b . |
В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Эти правила также распространяются на оператор switch. Преобразование типов не происходит при использовании === или !== так как в этом случае кроме самих значений сравниваются еще и типы.
var_dump ( 0 == "a" ); // 0 == 0 -> true
var_dump ( "1" == "01" ); // 1 == 1 -> true
var_dump ( "10" == "1e1" ); // 10 == 10 -> true
var_dump ( 100 == "1e2" ); // 100 == 100 -> true
?php
switch ( "a" ) case 0 :
echo "0" ;
break;
case "a" : // Эта ветка никогда не будет достигнута, так как "a" уже сопоставленно с 0
echo "a" ;
break;
>
?>
Для различных типов сравнение происходит в соответствии со следующей таблицей (по порядку).
Тип операнда 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 всегда больше |
Пример #1 Сравнение булево/null
// Булево и null всегда сравниваются как булево значение
var_dump ( 1 == TRUE ); // TRUE - тоже что и (bool)1 == TRUE
var_dump ( 0 == FALSE ); // TRUE - тоже что и (bool)0 == FALSE
var_dump ( 100 < TRUE ); // FALSE - тоже что и (bool)100 < TRUE
var_dump (- 10 < FALSE ); // FALSE - тоже что и (bool)-10 < FALSE
var_dump ( min (- 100 , - 10 , NULL , 10 , 100 )); // NULL - (bool)NULL < (bool)-100 , тоже что и FALSE < TRUE
?>?php
Пример #2 Алгоритм сравнения обычных массивов
// Так сравниваются массивы при сравнении стандартными операторами
function standard_array_compare ( $op1 , $op2 )
if ( count ( $op1 ) < count ( $op2 )) return - 1 ; // $op1 < $op2
> elseif ( count ( $op1 ) > count ( $op2 )) return 1 ; // $op1 > $op2
>
foreach ( $op1 as $key => $val ) if (! array_key_exists ( $key , $op2 )) return null ; // не могут быть сравнимы
> elseif ( $val < $op2 [ $key ]) return - 1 ;
> elseif ( $val > $op2 [ $key ]) return 1 ;
>
>
return 0 ; // $op1 == $op2
>
?>?php
Сравнение чисел с плавающей точкой
Из-за особого внутреннего представления float , не нужно проверять на равенство два float -числа.
Для более подробной информации смотрите документацию по типу float .
Тернарный оператор
Еще одним условным оператором является тернарный оператор "?:".
Пример #3 Присваивание значения по умолчанию
// Пример использования тернарного оператора
$action = (empty( $_POST [ 'action' ])) ? 'default' : $_POST [ 'action' ];
?php
// Приведенный выше код аналогичен следующему блоку с использованием 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 неочевидно при использовании нескольких тернарных операторов в одном выражении:
Пример #4 Неочевидное поведение тернарного оператора
// на первый взгляд, следующий код должен вывести 'true'
echo ( true ? 'true' : false ? 't' : 'f' );
?php
// однако, он выводит 't'
// это происходит потому, что тернарные выражения вычисляются слева направо
// это намного более очевидная версия вышеприведенного кода
echo (( true ? 'true' : false ) ? 't' : 'f' );
// здесь вы можете видеть, что первое выражение вычисляется в 'true', которое
// в свою очередь вычисляется в (bool)true, таким образом возвращая истинную ветвь
// второго тернарного выражения.
?>