PHP-4 Эффективная работа


Арифметические операторы
Операторы присваивания
Битовые операторы
Операторы сравнения
Операторы обработки ошибочных ситуаций
Встроенный интерпретатор
Операторы инкремента и декремента
Логические операторы
Приоритеты вычислений
Строковые операторы

5.7. Операторы инкремента и декремента

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

Логические операторы в РНР (табл. 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

примечание
       Читатель, видимо, обратил внимание на то, что операторы «И» и «ИЛИ» имеют два формата. Это не описка и не синонимы. Дело в том, что два варианта имеют различные приоритеты, что позволяет при построении сложных условных выражений обойтись без скобок. Подробнее этот вопрос рассмотрен ниже.

5.9. Приоритеты вычислений

Каждый оператор в РНР, как и в Си, и в 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

5.10. Строковые операторы

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

Вот как работают эти операторы:
$а = "ВсеМ ";
$b = $а . "привет!";      // теперь в $b строка "Всем привет!"
$а .= "привет!";     // а теперь и в $а "Всем привет!"

назад
далее

Сайт управляется системой uCoz