Арифметические операции ( а + b, а – b, а *b, а /b, а % b).
Операция деления / возвращает целое число (т. е. результат деления нацело), если оба выражения а и b — целого типа, в противном случае результат будет дробным. Операция вычисления остатка от деления % работает только с целыми числами, так что применение ее к дробным может привести, к нежелательному результату.
а.b — слияние строк а и b;
а[n] — символ строки в позиции n.
Собственно, других строковых операций и нет — все остальное, что можно сделать со строками в РНР, выполняют стандартные функции.
Для операций $а += 1 и $b-= 1 в связи с их чрезвычайной распространенностью в РНР ввели, как и в С, специальные операторы:
$а++ — увеличение переменной $а на 1;
$а-- уменьшение переменной $а на 1.
Как и в языке С, эти операторы увеличивают или уменьшают значение переменной, а в выражении возвращают значение переменной $а до изменения. Например:
$а = 10;
$b= $а++;
echo "а=$а, b=$b"; // выведет а=11, Ь=10
Существуют также парные операторы, которые указываются до, а не после имени переменной. Соответственно, и возвращают они значение переменной уже после изменения. Например:
$а = 10;
$b = --$а;
echo "a=$a, b=$b"; // выведет а=9, b=9
Эти операции предназначены для работы (установки/снятия/проверки) групп битов в целой переменной. Биты целого числа — это не что иное, как отдельные разряды того же самого числа, записанного в двоичной системе счисления.
а & b //Результат — число с установленными битами, которые выставлены и в а, и в b
одновременно.
а | b //Результат — число с установленными битами, которые выставлены либо в а,
либо в b, либо одновременно.
~ а //Результат, у которого на месте единиц в а стоят нули, и наоборот.
а << b //Результат — число, полученное поразрядным сдвигом а на b битов влево.
а>> b //Результат — число, полученное поразрядным сдвигом а на b битов вправо.
Операции сравнения позволяют сравнивать два значения между собой и, если условие выполнено, возвращают true, в противном случае — false.
а == b, а != b, а < b , а > b, а <= b, а >= b
Если один из операндов оператора сравнения — числовой, то сравнение всегда выполняется в числовом контексте, даже если второй операнд — не число.
В РНР версии 5 сравнивать на равенство или неравенство можно не только скалярные переменные (т. е. строки и числа), но также массивы и объекты.
$х = array(1, 2, "3") ;
$у = array(1, 2, 3);
echo "Равны ли два массива? ".($х == $у);
Данный пример сообщит, что массивы $х и $у равны, несмотря на то, что последний элемент одного из них — строка, а другого — число. То есть, если оператор == сталкивается с массивом, он идет "вглубь" и сверяет также каждую пару переменных. Делает он это при помощи самого себя (рекурсивно), выполняя, в частности, все правила сравнения логических выражений, которые были описаны выше. Рассмотрим еще один пример:
$х = array(1, 2, true);
$у = array(1, 2, 3) ;
echo "Равны ли два массива? ". ($х == $у);
Смотрите, на первый взгляд, массивы $х и $у сильно различаются. Но с точки зрения РНР 3==true. Поэтому нет ничего удивительного в сообщении программы о равенстве двух данных массивов. Опишем, как оператор == работает с объектами.
class AgentSmith {}
$smit = new AgentSmith();
$wesson = new AgentSmith();
echo ($smit == $wesson)
Хотя объекты $ smith и $wesson создавались независимо друг от друга и потому различны, они структурно выглядят одинаково (содержат одинаковые данные), а потому объекты совпадают. Вывод: две переменные равны в смысле ==, если они хранят одинаковые величины.