Арифметические операторы
Операторы присваивания
Битовые операторы
Операторы сравнения
Операторы обработки ошибочных ситуаций
Встроенный интерпретатор
Операторы инкремента и декремента
Логические операторы
Приоритеты вычислений
Строковые операторы
Когда-то язык Си унаследовал у своего старшего брата — Ассемблера — операторы инкрементирования и декрементирования. При этом речь не свелась к прямому копированию. Появилась возможность модификации значений переменных до
и после считывания значения. В РНР этот механизм также реализован, хотя и не
столь полно, как в Си. Фактически разработчики 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 строка "Всем привет!"
$а .= "привет!"; // а теперь и в $а "Всем привет!"
|