Операции в PHP

Последнее обновление: 06.03.2021

В 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<<y - сдвигает число x влево на y разрядов. Например, 4<<1 сдвигает число 4 (которое в двоичном представлении 100) на один разряд влево, то есть в итоге получается 1000 или число 8 в десятичном представлении

  • >>

    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 и только потом умножение.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850