Использование операций

Операции — это символы, которые используются для манипуляции значениями и переменными за счет выполнения над ними той или иной операции. Некоторые из этих операций нам потребуются для вычисления общей суммы заказа клиента и размера налога на этот заказ.

Ранее уже упоминались две операции: присваивания (=) и конкатенации строк (.). Далее мы рассмотрим полный список операций.

В общем случае операции могут выполняться над одним, двумя и тремя аргументами, причем большинство из них выполняется над двумя аргументами. Например, операция присваивания требует двух аргументов, а именно, адреса ячейки, указываемого слева от символа =, и выражения, указываемого справа от него. Эти аргументы называются операндами, т.е. элементами, над которыми выполняется соответствующая операция.

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

Арифметические операции очень просты — это обычные математические операции. Арифметические операции перечислены в табл. 1.1.

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

Мы можем сохранить результат любой из этих операций, например:

$result = $а + $b;

Сложение и вычйтание имеют традиционный смысл. Результатом их выполнения является, соответственно, сумма и разность значений, хранящихся в переменных и $b.

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

$а = –1;

Умножение и деление также работают обычным образом. Обратите внимание на использование звездочки вместо традиционного математического символа умножения и наклонной черты вместо обычного символа деления.

Операция деления по модулю возвращает остаток от деления переменной на переменную $b. Рассмотрим следующий фрагмент кода:

$а = 27;

$b = 10;

$result = $а%$b;


Значение, сохраненное в переменной $result, представляет собой остаток от деления 27 на 10, т.е. 7.

Следует обратить внимание на то, что арифметические операции обычно применяются к целым числам или значениям с двойной точностью. В случае их применения к строкам РНР предпринимает попытку выполнить эти операции, преобразуя строки в числа. Если строка содержит символы "е" или "Е", то она считается числом в экспоненциальной форме записи и преобразуется в числовое значение float. В противном случае строка преобразуется в целочисленное значение. РНР выполняет поиск цифр в начале строки и найденные цифры использует в качестве значения; если в начале строки цифр нет, то ее значением будет ноль.

Строковые операции

Выше мы сталкивались только с одной строковой операцией — операцией конкатенации строк. Ее можно применять для объединения двух строк в одну и сохранения результата, при этом она имеет много общего с операцией сложения двух чисел.

$а = "Автозапчасти ";

$b = "от Вована";

$result = $a.$b;

Теперь переменная $result содержит строку "Автозапчасти от Вована".

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

Мы уже знакомы с операцией =, основной операцией присваивания. Этот символ всегда означает операцию присваивания и читается как “устанавливается равным”. Например:

$totalqty = 0;

Эту строку следует понимать, как “значение переменной $totalqty устанавливается равным нулю”. Почему именно так, а не иначе, станет ясно после того, как мы рассмотрим операции сравнения далее.

Значения, возвращаемые операцией присваивания

Как и в случае других операций, в результате выполнения операции присваивания возвращается некоторое итоговое значение. Если записать:

$а + $b;

то значением этого выражения будет результат сложения переменных и $b. Аналогично, можно записать:

$а = 0;

Значением всего приведенного выражения будет 0. В конечном итоге появляется возможность выполнять действия, подобные следующему:

$b = 6 + ($а = 5);

В результате значение переменной $b устанавливается равным 11. Это справедливо для всех операторов присваивания: значение всего оператора присваивания есть значение, присвоенное левому операнду.

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

Комбинированные операции присваивания

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

$а += 5;

эквивалентно:

$а = $а + 5;

Комбинированные операции присваивания существуют для каждой арифметической операции, а также для операции конкатенации строк.
Список всех объединенных операций присваивания вместе с результатами их действия приведен в табл. 1.2.

Комбинированные операции присваивания

Префиксный и суффиксный инкремент и декремент

Операции префиксного и суффиксного инкремента (++) и декремента (– –) аналогичны операциям += и –=, но с несколькими отличиями.

Все операции инкремента оказывают двойное действие — они увеличивают значение переменной на единицу и присваивают переменной это новое значение. Рассмотрим следующий код:

$а = 4;

echo ++$а;

Во второй строке используется операция префиксного инкремента, получившая это название по той причине, что символы ++ предшествуют переменной . В результате сначала значение увеличивается на 1, после чего оператор echo возвращает новое значение. В рассматриваемом примере значение увеличивается и на экран выводится число 5. Значением всего этого выражения будет 5. (Обратите внимание, что фактическое значение, хранящееся в переменной , изменится: результат выполненных действий не ограничивается простым возвратом значения выражения $а + 1.)

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

$а = 4;

echo $а++;

В данной ситуации действия выполняются в обратном порядке. То есть, сначала значение возвращается и выводится на экран, и только после этого оно увеличивается на 1. Результатом выполнения этих двух строк будет 4. Именно это значение и будет выведено на экран. В то же время, после выполнения этого оператора переменная принимает значение 5.

Нетрудно догадаться, что операция (– –) действует аналогично, только в этом случае значение уменьшается, а не увеличивается на 1.

Операция ссылки

Операция ссылки, обозначаемая как & (амперсанд), может использоваться в сочетании с операцией присваивания. Обычно, когда значение одной переменной присваивается другой переменной, создается копия первой переменной, которая сохраняется где-то в памяти. Например:

$а = 5;

$b = $а;

Приведенные строки кода создают вторую копию значения переменной и сохраняют ее в переменной $b. Если впоследствии значение подвергнется изменению, значение $b останется прежним:

$а = 7; // Значение $b по-прежнему остается равным 5

Создания копии можно избежать, используя операцию ссылки &, например:

$а = 5;

$b = &$а;

$а = 7; // Теперь оба значения и $b равны 7

Ссылки считаются довольно-таки трудными для понимания. Помните, что ссылка скорее подобна псевдониму, нежели указателю. И , и $b указывают на один и тот же участок памяти. Это можно изменить, сбросив одну из переменных, например:

unset($а);

Сброс не изменяет значения переменной $b (равное 7), но разрывает связь между переменной и значением 7, хранящимся в памяти.

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

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

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

Операция равенства == (два знака равно) позволяет проверить равенство двух значений. Например, мы можем воспользоваться выражением

$а = $b

для проверки равенства значений, хранящихся в переменных и $b. Результатом этого выражения будет true, если они равны, или false, если они не равны.

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

$а = 5;

$Ь = 7;

Если затем проверить результат операции $а = $b, получится значение true. Почему? Значением выражения $а = $b будет значение, присвоенное левому операнду, которое в данном случае равно 7. Это ненулевое значение, поэтому выражение вычисляется как true. Если же вашей целью была проверка выражения $а == $b, результат которого равен false, значит, в коде допущена логическая ошибка, которую исключительно трудно обнаружить. Всегда следует проверять правильность использования этих двух операций, дабы убедиться, что вы их не перепутали и выбрали именно ту, которая нужна.

Другие операции сравнения

РНР поддерживает также ряд других операций сравнения, которые перечислены в табл. 1.3.

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

Обратите внимание на операцию проверки идентичности, которая возвращает значение true только в том случае, если оба операнда равны и имеют один и тот же тип. Например, 0=='0' даст true, тогда как 0==='0'false, поскольку первый 0 представляет собой целое число, а второй — строку.

Логические операции

Логические операции служат для комбинирования результатов логических условий. Например, нас может интересовать случай, когда значение переменной находится в диапазоне между 0 и 100. В этом случае потребуется проверить условия $а>=0 и $а<=100, используя операцию логического И (AND), как продемонстрировано в следующем примере:

$а >= 0 && $а <= 100

РНР поддерживает логические операции AND (И), OR (ИЛИ), XOR (исключающее ИЛИ) и NOT (НЕ).

Перечень логических операций вместе с описанием их применения представлен в табл. 1.4.

Логические операции

Операции and и or обладают меньшим приоритетом, нежели операции && и | |. Приоритеты операций более подробно рассматриваются далее.

Поразрядные операции

Поразрядные операции позволяют обрабатывать целые числа как последовательности представляющих их разрядов. Вероятно, использовать эти операции вам придется не особенно часто, тем не менее, с их перечнем можно ознакомиться в табл. 1.5.

Поразрядные операции

Другие операции

В дополнение к рассмотренным выше операциям существует также множество других.

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

Две специальных операции new и –> применяются, соответственно, для создания экземпляра класса и для доступа к элементам класса.

Существуют еще три операции, которые кратко рассматриваются ниже.

Тернарная операция

Тернарная операция?: — записывается в следующей форме:

условие ? значение, если условие истинно : значение, если условие ложно

Эта тернарная операция подобна рассматриваемой далее в главе версии оператора if-else, записываемой в виде выражения.

Ниже приведен простой пример:

($grade > 50 ? 'Сдан' : 'Не сдан');

Это выражение содержательно интерпретирует оценку ($grade), полученную студентом на экзамене, как 'Сдан' или 'Не сдан'.

Операция подавления ошибки

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

$а = @(57/0);

Без операции @ эта строка будет генерировать предупреждение о делении на ноль. При наличии операции @ вывод сообщения об ошибке подавляется.

В случае такого подавления сообщений об ошибках потребуется предусмотреть некоторый код для проверки, что именно стало причиной появления того или иного предупреждения. Если при установке модуля РНР функция track errors была активизирована в php.ini, то сообщение об ошибке будет сохраняться в глобальной переменой $php_errormsg.

Операция выполнения

В действительности операция выполнения представляет собой пару операций — пару обратных одинарных кавычек (``). Их не следует путать с обычными одинарными кавычками — обычно они вводятся с помощью клавиши, на которой расположен символ ~ (тильда).

Все, что заключено в обратные одинарные кавычки, РНР пытается запустить как команду, вводимую в командной строке сервера. Вывод команды будет значением выражения.

Например, в среде UNIX-подобных операционных систем можно использовать следующие строки:

$out = `ls -la` ;

echo '<pre>'.$out.'</pre>';

Ha Windows-сервере этим строкам эквивалентны такие строки:

$out = `dir с:`;

echo '<pre>'.$out.'</pre>';

Любая из версий этого кода получит листинг каталога и сохранит его в переменной $out. Затем его можно вывести в окне браузера либо манипулировать им по своему усмотрению.

Существуют и другие способы выполнения команд на сервере.

Операции для работы с массивами

В РНР существует несколько операций для работы с массивами. Операции доступа к элементам массива ([ ]) позволяют работать с элементами массивов. Кроме того, в некоторых контекстах массивов можно использовать операцию =>. Все эти операции рассматриваются далее.

Имеются также другие операции для работы с массивами. Несмотря на то что все они будут подробно описаны далее, все же имеет смысл ознакомиться с их списком (табл. 1.6).

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

Операции для работы с массивами

Операция определения типа

Существует единственная операция определения типаinstanceof. Хотя эта операция используется в объектно-ориентированном программировании, мы даем ее здесь ради завершенности рассмотрения.

Операция instanceof позволяет проверить, является ли заданный объект экземпляром конкретного класса, например:

class sampleClass{};

$myObject = new sampleClass ();

if ($myObeject instanceof sampleClass)

echo "myObject является экземпляром sampleClass";