Операции в PHP

В PHP мы можем использовать различные операторы: арифметические, логические и т.д. Рассмотрим каждый тип операций.

Арифметические операции

+ (операция сложения)
Например, $a + 5

- (операция вычитания)
Например, $a - 5

* (умножение)
Например, $a * 5

/ (деление)
Например, $a / 5

% (получение остатка от деления)
Например:

$a = 12;
echo $a % 5; // равно 2

** (возведение в степень)
Например, $a ** 2
Примеры операций:

$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 = 13 b = 13

Здесь сначала к значению переменной $a прибавляется единица, а затем ее значение приравнивается переменной $b.
Теперь посмотрим, что будет в случае с постфиксным инкрементом:

$a = 12;
$b = $a++; // $b равно 12
echo "a = $a   b = $b";

Результат работы:
a = 13 b = 12

Здесь сначала значение переменной $a передается переменной $b, а затем происходило увеличение значения переменной $a.
Декремент - операция -- представляет уменьшение значения на единицу. Она аналогично инкременту бывает префиксной и постфиксной и работает аналогично. Например, префиксный декремент:

$a = 12;
$b = --$a; // $b равно 11
echo "a = $a   b = $b";

Результат работы:
a = 11 b = 11

Сначала значение переменной $a уменьшается на единицу, а затем ее значение приравнивается переменной $b.
Постфиксный декрементом:

$a = 12;
$b = $a--; // $b равно 12
echo "a = $a   b = $b";

Результат работы:
a = 11 b = 12

Здесь же сначала значение переменной $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, иначе возвращает 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

Здесь число 4 в двоичной системе равно 100, а число 5 равно 101. Поразрядно умножим числа и получим (1*1, 0*0, 0 *1) = 100, то есть число 4 в десятичном формате.

• | (логическое сложение)
Похоже на логическое умножение, операция также производится по двоичным разрядам, но теперь возвращается единица, если хотя бы у одного числа в данном разряде имеется единица. Например:

$a = 4; //100
$b = 5; //101
echo $a | $b; // равно 5 - 101

Поразрядно сложим числа и получим (1+1, 0+0, 0+1) = 101, то есть число 5 в десятичном формате.

^ (операция исключающего ИЛИ)
Возвращает единицу, если у обоих операндов разные значения соответствующих разрядов. Но если у обоих операндов значения соответствующих разрядов совпадают, то возвращается 0. Например:

$a = 5 ^ 4; // 101^100=001  - в десятичой системе 1
$b = 7 ^ 4; // 111^100=011  - в десятичой системе 3

Поразрядно произведем операцию 5 ^ 4 (в двоичной системе она аналогична операции 101^100): (1^1, 0^0, 0^1) = 001. В случае с 1^1 значения разрядов совпадают, поэтому возвращается 0. Во втором случае - 0^0 значения также совпадают, поэтому также возвращается 0. В третьем случае - 0^1 значения разные, поэтому возвращается 1. В итоге получится 001 или число 1 в десятичной системе.

~ (логическое отрицание)
инвертирует все разряды: если значение разряда равно 1, то оно становится равным нулю, и наоборот.

$a = 4;     //00000100 
$b = ~$a;   //11111011  -5
echo $b;    // равно -5

<< x<

>>
x>>y - сдвигает число x вправо на y разрядов. Например, 16>>1 сдвигает число 16 (которое в двоичном представлении 10000) на один разряд вправо, то есть в итоге получается 1000 или число 8 в десятичном представлении

Операции присваивания

=
Приравнивает переменной определенное значение: $a = 5

+=
Сложение с последующим присвоением результата. Например:

$a=12;
$a += 5;
echo $a; // равно 17

-=
Вычитание с последующим присвоением результата. Например:

$a=12;
$a -= 5;
echo $a; // равно 7

*=
Умножение с последующим присвоением результата:

$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=12;
$a %= 5;
echo $a; // равно 2

**=
Получение результата от возведения в степень:

$a=8;
$a **= 2;
echo $a; // равно 64 (8 в степени 2)

&=
Получение результата от операции логического умножения:

$a=5; $a &= 4; // 101&100=100 - 4

|=
Получение результата от операции логического сложения:

$a=5; $a |= 4; // 101|100=101 - 5

• ^=
Получение результата от операции исключающего ИЛИ:

$a=5; $a ^= 4; // 101^100=001 - 1

<<= Получение результата от операции сдвига влево:

$a=8; $a <<= 1; // 1000 << 1 = 10000 - 16

>>=
Получение результата от операции сдвига вправо:

$a=8; $a >>= 1; // 1000 >> 1 = 100 - 4

Приоритет операций

Если одно выражение содержит несколько разных операций, то при выполнении выражения учитывается приоритет операций. Сначала выполняются операции с большим приоритетом и в конце с меньшим приоритетом.
Приоритет операций можно описать следующей таблицей:

**
++ -- ~
!
* / %
+ - .
<< >>
< > <= >=
== != === !== << <=< & ^ | && || ? : (тернарный оператор) = += -= *= **= /= .= %= &= |= ^= <<= >>= (операторы присваивания)
and
xor
or

Чем выше оператор в этой таблице, тем больше его приоритет. Например:

$a = 10 + 5 * 2;    // 20

Операция умножения имеет больший приоритет, чем сложение. Поэтому сначала выполняется подвыражение 5 * 2
При этом скобки повышают приоритет операции, используемой в выражении.

$a = (10 + 5) * 2;  // 30

В данном случае сначала выполняется подвыражение 10 + 5 и только потом умножение.

статья взята с сайта:

metanit.com

Обсуждение закрыто.