PHP: Арифметические операторы

В этой главе:

  • Операторы вычитания, умножения, деления, деления по модулю и сложения

  • Унарное отрицание

  • Инкремент

  • Декремент

  • Сокращенные операторы присваивания

В PHP доступны все основные математические операции. В качестве операндов можно использовать как целые, так и вещественные числа.

В таблице приведен список арифметических операторов:

Оператор

Знак

Описание

Сложение

+

Сложение двух значений

Вычитание

-

Вычитание одного значения из другого

Умножение

*

Перемножение двух значений

Деление

/

Деление одного значения на другое

Получение остатка от деления

%

Деление одного значения на другое и возвращение остатка (деление по модулю)

Инкремент

++

Сокращенная запись увеличения числа на единицу

Декремент

--

Сокращенная запись уменьшения числа на единицу

Унарное отрицание

-

Превращение положительного числа в отрицательное или отрицательного в положительное

Операторы вычитания, умножения, деления, деления по модулю и сложения

Операторы вычитания, умножения, деления, деления по модулю и сложения используется точно так же, как и в математике. Здесь стоит уделить внимание операторам деления и деления по модулю.

Оператор деления ("/") возвращает число с плавающей точкой, кроме случая, когда оба значения являются целыми числами (или строками, которые преобразуются в целые числа), которые делятся нацело - в этом случае возвращается целое значение.

1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
  $first = 10;
  $second = 7;
  $result1 = $first - $second;
  $result2 = $first * $second;
  $result3 = $first / $second;
  $result4 = 13 % 3;
  echo "result1 = $result1 <br> result2 = $result2 <br>";
  echo "result3 = $result3 <br> result4 = $result4";
 
?>

При делении по модулю операнды преобразуются в целые числа (c удалением дробной части) до начала операции. Результат операции остатка от деления % будет иметь тот же знак, что и делимое:

1
2
3
4
5
6
7
8
<?php
 
  echo (7 % 3)."\n";           // выводит 1
  echo (7 % -3)."\n";          // выводит 1
  echo (-7 % 3)."\n";          // выводит -1
  echo (-7 % -3)."\n";         // выводит -1
 
?>

Унарное отрицание

Оператор унарного отрицания обозначается знаком '-', он изменяет значение своего единственного операнда на противоположное:

1
2
3
4
5
6
<?php
 
  $negnum = -5; //определяем переменную с отрицательным значением
  $result = 4 + (-5);
 
?>

В данном случае круглые скобки не нужны, потому что унарное отрицание имеет наивысший приоритет, но они помогают организовать код таким образом, чтобы было понятно, что имеет место сложение чисел -5 и 4.

Инкремент

Оператор инкремента, обозначается знаком ++ и может быть расположен с любой стороны от операнда, с которым он работает. Он увеличивает это значение на единицу, точно также, как при прибавлении единицы к значению. Фактический результат зависит от того, где был применен оператор, до или после операнда, с которым он применялся. Данный оператор часто используется с переменными, и зачастую это происходит внутри циклов (про циклы будет рассказано далее).

Префиксная форма инкремента

Префиксная форма - это когда оператор инкремента расположен перед операндом, такая форма записи означает то, что инкремент будет выполнен первым: он увеличивает значение операнда на единицу и только потом уже выполняется вся остальная часть инструкции:

1
2
3
4
5
6
7
8
<?php
 
  $num1 = 2;
  $result = ++$num1;
 
  echo $result;
 
?>

Постфиксная форма инкремента

Постфиксная форма записывается немного по другому - инкремент располагается в этом случае после операнда. При постфиксной форме записи первое использование операнда возвращает его текущее значение, только после этого значение будет увеличено на единицу:

1
2
3
4
5
6
7
8
<?php
 
  $num1 = 2;
  echo $num1++;  // операнд вернет 2, затем увеличит значение
 
  echo $num1;    // значение операнда 3
 
?>

Декремент

Оператор декремента, обозначается знаком --, и в отличие от оператора инкремента, уменьшает, а не увеличивает, на единицу значение своего операнда. Декремент также допускает префиксную и постфиксную форму записи:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
  // префиксная форма декремента
  $num1 = 5;
 
  echo --$num1// сначала выполняется декремент, затем выводится 4
 
  echo $num1;    // значение операнда 4
 
 
  // постфиксная форма декремента
  $num1 = 5;
  echo $num1--;  // операнд вернет 5, затем уменьшит значение
 
  echo $num1;    // значение операнда 4
 
?>

Сокращенные операторы присваивания

В PHP предусмотрены сокращенные записи операторов присваивания, упрощающие программирование. Посмотрим на простой пример:

1
2
3
4
5
6
<?php
 
  $x = 5;
  $x = $x + 30;
 
?>

Этот пример можно переписать, используя сокращенный оператор присваивания:

1
2
3
4
5
6
<?php
 
  $x = 5;
  $x += 30;
 
?>

Ниже в таблице перечислены сокращенные операторы присваивания для арифметических операций:

Сокращенная запись арифметических операторов присваивания

Оператор

Описание

Пример

Сокращенная форма записи

+=

Присваивает левому операнду, сумму значений правого и левого операндов.

$x = $x + $y

$x += $y

-=

Присваивает левому операнду, разность значений правого и левого операндов.

$x = $x - $y

$x -= $y

*=

Присваивает левому операнду, произведение значений правого и левого операндов.

$x = $x * $y

$x *= $y

/=

Присваивает левому операнду, частное значений правого и левого операндов.

$x = $x / $y

$x /= $y

%=

Присваивает левому операнду, остаток от деления значений правого и левого операндов.

$x = $x % $y

$x %= $y

У этих операторов имеется два преимущества. Во-первых, они более компактны и их удобнее записывать, чем их "не сокращенные" эквиваленты. И во-вторых, они дают более эффективный исполняемый код, за счет того, что левый операнд в этих операциях вычисляется всего один раз. Именно по этим причинам сокращенная запись операторов присваивания чаще всего применяются в программировании.