Операции — это символы, которые используются для манипулирования значениями и переменными за счет выполнения над ними той или иной операции. Некоторые из этих операций нам потребуются для вычисления общей суммы заказа клиента и размера налога на этот заказ.
В общем случае операции могут выполняться над одним, двумя и тремя аргументами, причем большинство из них выполняется над двумя аргументами. Например, операция присваивания требует двух аргументов, а именно, адреса ячейки, указываемого слева отсимвола =, и выражения, указанного справа от него. Эти аргументы называются операндами, т.е. элементами, над которыми выполняется соответствующая операция.
Арифметические операции — это обычные арифметические действия.
Таблица 1. Арифметические операции РНР
Операция | Название | Пример |
+ | Cложение | $a + $b |
- | Вычитание | $a - $b |
* | Умножение | $a * $b |
/ | Деление | $a / $b |
% | Деление по модулю | $a % $b |
Мы можем сохранить результат любой из этих операций, например:
$result = $a + $b;
Сложение и вычитание имеют традиционный смысл. Результатом их выполнения является, соответственно, сумма и разность значений, хранящихся в переменных $a и $b.
Символ вычитания (-) можно использовать в качестве унарной операции (т.е. операции, которая выполняется над одним аргументом или операндом) для обозначения отрицательных чисел. Например:
$a = -1;
Умножение и деление также работают обычным образом. Обратите внимание на использование звездочки вместо традиционного математического символа умножения и наклонной черты вместо обычного символа деления.
Операции деления по модулю возвращают остаток от деления переменной $a на переменную $b.
$a = 42;
$b = 10;
$result = $a%$b;
Значение сохраненное в переменной $result, представляет собой остаток от деления 42 на 10, т.е. 2.
Арифметические операции обычно применяются к целым числам или значениям с двойной точностью. В случае их применения к строкам РНР предпринимает попытку выполнить эти операции, преобразуя строки в числа. Если строка содержит символы "е" и "Е", то она считается числом в экспотенциальной форме записи и преобразуется в числовое значение float. В противном случае строка преобразуется в целочисленное значение. РНР выполняет поиск цифр в начале строки и найденные цифры использует в качестве значения; если в начале строки цифр нет, то ее значение будет ноль.
Мы уже сталкивались с одной строковой операцией — операцией конкатенации строк. Ее можно применять для объединения двух строк в одну и сохранения результата, при этом она имеет много общего с операцией сложения двух чисел.
$a = "Автозапчасти ";
$b = "от компании АВС";
$result = $a.$b;
Теперь переменная $result содержит строку "Автозапчасти от компании АВС".
Мы уже знакомы с операцией =, основной операцией присваивания. Этот символ всегда означает операцию присваивания и читается ка "устанавливается равным".
Например:
$totalqty = 0;
Эту строку надо понимать, как "значение переменной $totalqty устанавливается равным нулю".
Как в случае других операций, в результате выполнения операции присваивания возвращается некоторое итоговое значение. Если записать:
$a + $b
то значением этого выражения будет результат сложения переменных $a и $b. Аналогично можно записать:
$a = 0;
Значением всего приведенного выражения будет нуль.
В конечном итоге появится возможность, выполнять действия, подобные следующему:
$b = 3 + ($a = 2);
В результате значение переменной $b устанавливается равным 5. Это справедливо для всех операторов присваивания: значение всего опрератора присваивания есть значение, присвоенное левому операнду.
При написании выражения можно пользоваться круглыми скобками для увеличения приоритета подвыражения, что и было сделано в приведенном примере. Скобки работают точно так же, как и в матаематике.
Помимо простых операций присваивания существует набор комбинированных операций присваивания. Каждая из них представляет собой сокращенную форму записи какой-то другой операции с переменной и присвоения результата этой переменной. Например:
$a += 5;
эквивалентно:
$a = $a + 5;
Комбинированные операции присваивания существуют для каждой арифметической операции, а также для операций конкатенации строк.
Таблица 2. Комбинированные операции присваивания с результатами действий
Операция | Использование | Эквивалентная операция |
+= | $a += $b | $a = $a + $b |
-= | $a -= $b | $a = $a - $b |
*= | $a *= $b | $a = $a * $b |
/= | $a /= $b | $a = $a / $b |
%/ | $a %= $b | $a = $a % $b |
.= | $a .= $b | $a = $a . $b |
Операции префиксного и суфиксного инкремента (++) и декремента (--) аналогичны операциям += и -=, но с несколькими отличиями.
Все операции инкремента оказывают двойное действие — они увеличивают значение переменной на единицу и присваивают переменной это новое значение.
$a = 5;
echo ++$a;
Во второй строке используется операция префиксного инкремента, получившая название по той причине, что символа ++ предшествуют переменной $a. В результате сначала значение $a увеличивается на 1, после чего оператор echo возвращает новое значение. В рассматриваемом примере $a увеличивается и на экран выводится число 6. Значением этого выражения будет 6.
В тоже время, если символы ++ следуют за переменной $a, значит, используется операция суфиксного инкремента. Она дает другой результат.
$a = 5;
echo $a++;
В данной ситуации действия выполняются в обратном порядке. Т.е., сначала значение $a возвращается и выводится на экран, и только после этого оно увеличивается на 1. Результатом выполнения этих двух строк будет 5. Именно это значение и будет выведено на экран. В тоже время, после выполнения этого оператора переменная $a принимает значение 6.
Операция -- действует аналогично, только в этом случае значение уменьшится на 1.
Операции ссылки, обозначаются как & (амперсанд), может использоваться в сочетании с операцией присваивания. Обычно, когда значение одной переменной присваивается другой переменной, создается копия первой переменной, которая сохраняется где-то в памяти. Например:
$a = 5;
$b = $a;
Приведенные строки кода создают вторую копию значения переменной $a и сохраняют ее в переменной $b. Если впоследствии значение $a подвегнется изменению, значение $b останется преждним.
$a = 7; //значение $b по-прежднему остается равным 5
Создание копии можно избежать, используя операцию ссылки &, например:
$a = 5;
$b = &$a;
$a =7; //теперь оба значения $a и $b равны 7
Ссылки считаются довольно трудными для понимания. Ссылка скорее подобна псевдониму, нежели указателю. И $a и $b указывают на один и тот же участок памяти. Это можно изменить, сбросив одну из переменных, например:
unset ($a);
Сброс не изменяет значения переменной $b (равное 7), но разрывает связь между переменной $a и значением 7, хранящимся в памяти.