Операции инкремента и декремента в PHP

Рассмотрим следующий код:

<?php $num = 0; $num = $num + 1; // прибавляем к переменной $num число 1 echo $num; // выведет 1 ?>

Как вы уже знаете, этот код можно переписать в сокращенном виде через оператор +=:

<?php $num = 0; $num += 1; // прибавляем к переменной $num число 1 echo $num; // выведет 1 ?>

На самом деле прибавление единицы в программировании встречается так часто, что для этой операции придуман еще более сокращенный синтаксис - специальный оператор ++ (инкремент), увеличивающий значение переменной на 1.

Перепишем наш код с его помощью:

<?php $num = 0; $num++; // прибавляем к переменной a число 1 echo $num; // выведет 1 ?>

Кроме операции ++ есть также операция -- (декремент), уменьшающая значение переменной на 1. Смотрите пример:

<?php $num = 0; $num--; // отнимаем от переменной $num число 1 echo $num; // выведет -1 ?>

Переделайте этот код так, чтобы в нем операции инкремента и декремента:

<?php $num = 10; $num = $num + 1; $num = $num + 1; $num = $num - 1; echo $num; ?>

Префиксный и постфиксный тип

На самом деле операции инкремента и декремента можно записывать двумя способами. В постфиксном виде операция записывается после имени переменной, вот так: $a++, а в префиксном виде - перед именем переменной, вот так: ++$a. Давайте посмотрим на примерах, в чем разница между двумя способами.

В следующем примере первый echo выведет 0, так как вначале сработает вывод на экран, а уже затем переменная увеличится:

<?php $num = 0; echo $num++; // выведет 0, тк переменная увеличится только после echo echo $num; // выведет 1 - переменная поменялась ?>

А теперь переменная вначале увеличится, а уже затем будет вывод на экран:

<?php $num = 0; echo ++$num; // выведет 1 - переменная увеличилась сразу ?>

Такое поведение справедливо не только для вывода на экран, но и для присваивания:

<?php $num1 = 0; $num2 = $num1++; // в переменную $num2 запишется 0 echo $num2; // выведет 0 echo $num1; // выведет 1 - переменная $num1 поменялась после записи в $num2 ?>

А теперь поменяем постфиксную форму на префиксную:

<?php $num1 = 0; $num2 = ++$num1; // в переменную $num2 запишется 1 echo $num2; // выведет 1 ?>

Если наша операция выполняется на отдельной строке, то разницы между префиксной и постфиксной формами нет:

<?php $num = 0; ++$num; $num++; echo $num; // выведет 2 ?>

Не запуская код, определите, что выведется на экран:

<?php $num = 3; echo ++$num; ?>

Не запуская код, определите, что выведется на экран:

<?php $num = 3; echo $num++; ?>

Не запуская код, определите, что выведется на экран:

<?php $num = 3; echo --$num; ?>

Не запуская код, определите, что выведется на экран:

<?php $num = 3; echo $num--; ?>

Не запуская код, определите, что выведется на экран:

<?php $num1 = 3; $num2 = ++$num1; echo $num1; echo $num2; ?>

Не запуская код, определите, что выведется на экран:

<?php $num1 = 3; $num2 = $num1++; echo $num1; echo $num2; ?>

Не запуская код, определите, что выведется на экран:

<?php $num1 = 3; $num2 = --$num1; echo $num1; echo $num2; ?>

Не запуская код, определите, что выведется на экран:

<?php $num1 = 3; $num2 = $num1--; echo $num1; echo $num2; ?>

Не запуская код, определите, что выведется на экран:

<?php $num1 = 3; $num1++; $num2 = $num1--; echo $num1++; echo --$num2; ?>