Арифметические операторы
Операторы присваивания
Битовые операторы
Операторы сравнения
Операторы обработки ошибочных ситуаций
Встроенный интерпретатор
Операторы инкремента и декремента
Логические операторы
Приоритеты вычислений
Строковые операторы
Когда-то язык Си унаследовал у своего старшего брата — Ассемблера — операторы инкрементирования и декрементирования. При этом речь не свелась к прямому копированию. Появилась возможность модификации значений переменных до
и после считывания значения. В РНР этот механизм также реализован, хотя и не
столь полно, как в Си. Фактически разработчики PHP-машины ограничились операторами сложения и вычитания, которые чаще всего используются на практике.
Примеры работы этих операторов представлены в табл. 5.4.
Таблица 5.4. Операторы инкремента и декремента
Пример | Название | Результат
| ++$а | Преинкремент | Прибавляет к $а единицу, а затем возвращает $а
| $а++ | Постинкремент | Возвращает $а, а затем прибавляет к $а единицу
| --$а | Предекремент | Вычитает из $ а единицу, а затем возвращает $ а
| $а-- | Постдекремент | Возвращает $ а, а затем вычитает из него единицу
|
Надо признать, что сам я довольно долго путался в пре- и постоперациях. Поэтому
для закрепления материала я хочу предложить вам небольшую демонстрационную программу:
<FONT SIZE=+1>
<h2> Демонстрация работы операторов инкремента и декремента</h2>
<?php
#
# /examples/php/part2/incr.php
*
echo "<hЗ>Пост-инкремент</hЗ>";
$a = 5;
echo "Было 5: " . $a++ . "<br>\n";
echo "А теперь 6: " . $a . "<br>\n";
echo "<hЗ>Пре-инкремент</hЗ>";
$a = 5;
echo "Было 5: " . ++$a . "<br>\n";
echo "А теперь 6: " . $a . "<br>\n";
echo "<hЗ>Постдекремент</hЗ>";
$a = 5;
echo "Было 5: " . $a-- . "<br>\n";
echo "А теперь 4: " . $a . <br>\n";
echo "<hЗ>Предекремент</hЗ>";
$a = 5;
echo "Было 5: " . --$a . "<br>\n";
echo "А теперь 4: " . $a . "<br>\n";
?>
И вот что мы получим на выходе (рис. 5.2).
Рис. 5.2. Операторы инкремента и декремента
Как видите, оператор постинкремента или постдекремента выполняет свою функцию, но возвращает старое значение, то, которое было у переменной до модификации. А оператор преинкремента (и предекремента) вначале модифицирует переменную, а потом возвращает ее значение.
Логические операторы в РНР (табл. 5.5) иногда путаются с битовыми операторами, и даже различный синтаксис не препятствует их неправильному применению.
Чтобы избежать ошибок, необходимо помнить, что логические операторы работают не с числами, а с логическими значениями, которых всего два: true и false.
Таблица 5.5. Логические операторы
Пример | Название | Результат
| $а and $b | И | True, если и $а, и $b равны true
| $а or $b | ИЛИ | True, если хотя бы одно из $а и $b равно true
| $а хоr $b | Исключающее ИЛИ | True, если только одно из $а и $bравно true
| ! Sa | Не | True, если $а равно false
| $а && $b | И | True, если и $а, и $b равны true
| Sa | | $b | ИЛИ | True, если хотя бы одно из $а и $b равно true
|
примечание
Читатель, видимо, обратил внимание на то, что операторы «И» и «ИЛИ» имеют два формата. Это не описка и не синонимы. Дело в том, что два варианта имеют различные приоритеты, что позволяет при построении сложных условных выражений обойтись без скобок. Подробнее этот вопрос рассмотрен ниже.
Каждый оператор в РНР, как и в Си, и в Perl, имеет определенный уровень приоритета и возможность ассоциативной связи с другими операторами. В табл. 5.6
приведен список этих параметров в порядке возрастания приоритета, то есть начиная с наименьшего. Обратите внимание, что операторы, заимствованные из Си,
сохранили приоритеты, используемые в этом языке.
Таблица 5.6. Приоритет операторов РНР в порядке возрастания
Ассоциативность | Операторы
| Left | '
| Left | or
| Left | xor
| Left | and
| Right | print
| Left | = += .= *= /= .= %= &= |= ^= ~ = <<= >>=
| left | 7 ;
| left | II
| left | &&
| left |
| left |
| left |
| non-associative |
| non-associative | < <=> >=
| left |
| left |
| left | / %
| right | !~ ++-- (int) (double) (string) (array) (object)
| right |
| non-associative | new
|
В РНР определено два оператора, предназначенных для работы со строками. Первым из них является оператор конкатенации «.», который, так же как и в Perl,
возвращает строку, представляющую собой результат объединения своих левого
и правого аргументов. Вторым оператором является «автоинкрементная версия»
оператора конкатенации, имеющая вид «. =». Этот оператор попросту дописывает
к концу строки, являющейся первым аргументом, второй аргумент.
Вот как работают эти операторы:
$а = "ВсеМ ";
$b = $а . "привет!"; // теперь в $b строка "Всем привет!"
$а .= "привет!"; // а теперь и в $а "Всем привет!"
|