Операторы
Синтаксис языка и операторы
🕛 01.11.2006, 12:58
Операторы присваивания Простейший оператор присваивания «=». Не путайте его с оператором сравнения «=». Присваивание осуществляется копированием значения из левой части выражения в правую. Возможны комбинации при присваивании:
$а = ($b = 4) + 5; // $а теперь равно 9. а $b равно 4.
Комбинированные операции (например, +=, &=, .=) позволяют сократить запись присваивания, объединяя ее с основной операцией, при этом переменная слева используется и как исходное значение, и как место сохранения результата.
$а = 3;
$а += 5: // $а = 8. эквивалентна: $а = $а + 5; $b = "Hello ".
$b .- "There!"; // заносит в $b строку "Hello There!", //эквивалентна $b = $b . "There!":
Поскольку присваивание осуществляется посредством копирования, иногда выгоднее использовать присваивание значения по ссылке: $var = &$othervar;. Присваивание по ссылке фактически меняет указатель в переменной назначения так, что теперь он указывает на место, в котором хранится значение назначаемой переменной, то есть обе переменные теперь ссылаются на одно и то же значение и изменение одной переменной влечет за собой непосредственное изменение другой.
Арифметические операторы
Пример
Название
Результат
$a + $b
Сложение
Сумма $а и $b
$a - $b
Вычитание
Разность между $а и $b
$a*$b
Умножение
Произведение $а и $b
$a/$b
Деление
Частное от деления $а на $b
$a % $b
Остаток
Остаток от целочисленного деления $а на $b
Оператор деления «/» возвращает целое значение (то есть выполняет целочисленное деление), если делимое и делитель - целые числа (строки конвертируются в целые числа). Иначе если одно из чисел дробное, то результат будет также-дробным.
Инкремент/Декремент
РНР использует синтаксис С в операторах пре- и постинкремента и декремента.
Пример
Название
Результат
++$а
Преинкремент
Увеличивает $а на единицу, а затем возвращает значение $а
$а++
Постинкремент
Возвращает $а, а затем увеличивает $а на единицу
-$а
Предекремент
Уменьшает $а на единицу, а затем возвращает значение $а
$а-
Постдекрсмент
Возвращает $а, а затем уменьшает $а на единицу
<?php
echo "<h3>Postincrement</h3>";
$a = 5:
echo "Должно равняться 5. " . $a++ "<br>\n";
echo "Должно равняться 6: " . $a . "<br>\n";
echo "<h3>Preincrement</h3>".
$a = 5:
echo "Должно равняться б: "
. ++$a . "<br>\n";
echo "Должно равняться 6: "
. $a . "<br>\n"; /
echo "<h3>Postdecrement</h3>":
a = 5.
echo "Должно равняться 5: " . $a- . "<br>\n"
echo "Должно равняться 4: " . $a . "<br>\n".
echo "<h3>Predecrement</h3>":
$a = 5.
echo "Должно равняться 4: " . -$a . "<br>\n"
echo "Должно равняться 4: "
. $a . "<br>\n": r
Бинарные операторы
Бинарные операторы изменяют значения отдельных битов в целочисленных переменных.
Пример
Название
Результат
$а & $b
Побитовое И
Побитовое «умножение» (1, если оба бита равны 1)
$а | $b
Побитовое ИЛИ
Побитовое «сложение» (0, если оба бита равны 0)
$а Л $b
Побитовое исключающее ИЛИ
«Различие» (1, если биты различные)
-$а
Инверсия
Меняет 1 на 0, а 0 на 1
$а « Sb
Побитовый сдвиг влево
Эквивалентен умножению на 2 $b раз
$а » $b
Побитовый сдвиг вправо
Эквивалентен делению на 2 $b раз
Схема действия побитовых операций:
Биты
Результат оператора
$а
$ь
$а & $b
$а| $b
$ал $b
~$а
0
0
0
0
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
0
Операторы сравнения
Пример
Название
Результат
$а -= $b
Равенство
True, если $а равно $b
$а === $b
Идентичность
True, если $а равно $b, и они одного типа
$а != $b
Неравенство
True, если $а не равно $b
Sa !== $b
Неидентичность
True, если $а не равно $b, или они разного типа
$a<$b
Меньше чем
True, если $а меньше чем $b
$a>$b
Больше чем
True, если $а больше чем $b
$a <= $b
Меньше или равно
True, если $а меньше или равно $b
$a >= $b
Больше или равно
True, если $а больше или равно $b
Другой условный оператор «? :» (тернарный), с синтаксисом:
((exprl) ? (ехрг2) : (ехргЗ))
действует так: это выражение имеет значение, равное ехрг2, если exprl равняется TRUE, в противном случае (если exprl = FALSE) оно равняется ехргЗ.
Логические операторы
Пример
Название
Результат
$а and $b
Логическое И
True, если $а И $b равны TRUE
$а or $b
Логическое ИЛИ
True, если $а ИЛИ $b равно TRUE
$а xor $b
Логическое исключающее ИЛИ
True, если $а и $b имеют разные логические значения
!$а
НЕ
Логическая инверсия
$а && $b
Логическое И
Аналогия «and»
$а || $b
Логическое ИЛИ
Аналогия «or»
Причина наличия двух аналогичных вариантов для операторов and и or - их различный приоритет (см. «Приоритет операторов»).
Конкатенация - слияние строк
Имеется два строковых оператора: конкатенация «.», объединяющая строки, и конкатенация с присваиванием «.=», которая позволяет сократить запись $А = $А . $Х; до $А .= $Х;.
$a = 'Hello ';
$b = $a "World!" // теперь $b содержит "Hello World!"
Приоритет операторов
Приоритет операторов определяет порядок вычисления значений выражений. Например, выражение 1+5*3 равно 16, а не 18, потому что умножение имеет более высокий приоритет и вычисляется до сложения. Скобки изменяют приоритет операторов, например:
(1+5)* 3 == 18
Ассоциативность
Операторы (в порядке уменьшения приоритета)
левая
левая
or
левая
XOr
левая
and
правая
левая
= += .= *= /=ж = %= &-, |=&_ _ <<= >> =
левая
V ;
левая
II
левая
&&
левая
!
левая
&
левая
&
не имеет
== != === i==
не имеет
<<->>=
левая
« »
левая
+-.
Ассоциативность
Операторы (в порядке уменьшения приоритета)
левая
* / 0/
/ %
(Ыправая
!-++.- (jnt) (double) (string) (array) (object) @
правая
F
не имеет
new
Операторы контроля ошибок
PHP поддерживает один оператор контроля ошибок - «0». Когда он предшествует выражению РНР, любое сообщение об ошибке, которое возникает при выполнении этого выражения, игнорируется. Если параметр track_errors разрешен, всякое сообщение об ошибке сохраняется в глобальной переменной $php_errormsg. Эта переменная перезаписывается каждый раз при возникновении новой ошибки.
<?php
/* Умышленная ошибка в SQL (лишняя кавычка): */
$res = @mysql_query ("select name, code from 'namelist") or
die ("Query failed er-or was '$php_errormsg'"): ?>
См. также функцию error_reporting().
Будьте внимательны: в настоящее время префиксный оператор контроля ошибок «@» блокирует даже сообщение о критических ошибках, прерывающих исполнение сценария. Поэтому при таком варианте выполнение сценария может быть прервано, но сообщение об ошибке выведено не будет.
Оператор запуска внешней программы
В РНР есть оператор «обратная галочка» (backticks): (" ') для запуска внешней программы. Запомните, это не одинарная кавычка! РНР попытается запустить программу (или исполняемый сценарий), как если бы она запускалась из командной оболочки. То, что выдается при этом запуске на консоль вывода, возвращается и может быть сохранено в переменной (и использовано для вывода). Заметьте, сам запуск ничего не выводит, если он завершается успешно.
// выдает список файлов текущего каталога
Soutput = "Is -аГ: // в сиаемах Unix
Soutput = 'dir'; // в системах Windows
echo "<pre>$output</pre>". // распечатать результат
запуска команды
См. также функции: system(), passthru(), exec(), popen() и escape-shel Icmd().