Операторы инкремента и декремента в PHP
PHP, аналогично языку Си, поддерживает префиксные и постфиксные операторы инкремента и декремента.
Пример |
Название |
Действие |
++$a |
Префиксный инкремент |
Увеличивает $a на единицу и возвращает значение $a. |
$a++ |
Постфиксный инкремент |
Возвращает значение $a, а затем увеличивает $a на единицу. |
--$a |
Префиксный декремент |
Уменьшает $a на единицу и возвращает значение $a. |
$a-- |
Постфиксный декремент |
Возвращает значение $a, а затем уменьшает $a на единицу. |
Постфиксные операторы инкремента и декремента
Как и в языке Си, эти операторы увеличивают или уменьшают значение переменной, а в выражении возвращают значение переменной $a до изменения. Например:
$a=10;
$b=$a++;
echo "a=$a, b=$b"; // Выводит a=11, b=10
Как видите, сначала переменной $b присвоилось значение переменной $a, а уж затем последняя была инкрементирована. Впрочем, выражение, значение которого присваивается переменной $b, может быть и сложнее — в любом случае, инкремент $a произойдет только после его вычисления. Такие операции называют постфиксными операциями инкремента.
Префиксные операторы инкремента и декремента
Существуют также операторы инкремента и декремента, которые указываются до, а не после имени переменной. Соответственно, и возвращают они значение переменной уже после изменения. Пример:
$a=10;
$b=--$a;
echo "a=$a, b=$b"; // Выводит a=9, b=9
Операции инкремента и декремента на практике применяются очень часто. Например, они встречаются практически в любом цикле for.
<?php
echo "<h3>Постфиксный инкремент</h3>";
$a = 5;
echo "Должно быть 5: " . $a++ . "<br />\n";
echo "Должно быть 6: " . $a . "<br />\n";
echo "<h3>Префиксный инкремент</h3>";
$a = 5;
echo "Должно быть 6: " . ++$a . "<br />\n";
echo "Должно быть 6: " . $a . "<br />\n";
echo "<h3>Постфиксный декремент</h3>";
$a = 5;
echo "Должно быть 5: " . $a-- . "<br />\n";
echo "Должно быть 4: " . $a . "<br />\n";
echo "<h3>Префиксный декремент</h3>";
$a = 5;
echo "Должно быть 4: " . --$a . "<br />\n";
echo "Должно быть 4: " . $a . "<br />\n";
?>
Булевые типы не подлежат инкрементированию и декрементированию.
Операции с символьными переменными
<?php
$i = 'W';
for($n=0; $n<6; $n++)
echo ++$i . "\n";
/*
Результат работы будет следующий:
X
Y
Z
AA
AB
AC
*/
?>
Еще раз напомним, что инкрементирование или декрементирование булевых переменных не приводит ни к какому результату.