Разница ++i и i++ в цикле for

413
11 января 2017, 04:00

Написал так:

for($i = 0; $i<=5; $i++){
 echo $i."<br>";
}

получил результат:

0
1
2
3
4
5

и так:

for($i = 0; $i<=5; ++$i){
 echo $i."<br>";
}

получил результат:

0
1
2
3
4
5

Как видите, результаты идентичны.

Так в чем же разница между постфиксным и префиксным инкрементом в данном случае (в цикле for)?

Answer 1

Различие между постфиксным и префиксным операторами инкремента состоит в возвращаемом значении выражения. Так как в приведенных примерах циклов результаты выражений не используются, то для циклов никакой разницы нет. В циклах используются значения переменной $i уже после вычисления выражений с инкрементами.

Сравните ваши циклы for с циклами while

$i = 0;
while ( ++$i <= 5 ){
 echo $i."<br>";
} 

и

$i = 0;
while ( $i++ <= 5 ){
 echo $i."<br>";
} 

В этих циклах уже используются результаты вычисления выражений с инкрементом.

Было время, когда вопрос, как писать в цикле for выражение инкремента либо как $i++ или ++$i вызывал серьезный интерес с точки зрения оптимизации кода на различных языках программирования. Но сейчас компиляторы и интерпретаторы настолько продвинулись вперед, что обычно генерируют один и тот же объектный код, когда значение выражения не используется.

Answer 2

Почему Вы думаете что в данном случае будет разница?
Польза от этих форм видна только если нужно поменять порядок выполнения в составной инструкции.

Пример:
Инкремент имеет больший приоритет, чем плюсы/минусы, поэтому вычисление будет уже с инкрементированным значением:

$i = 0;
5 +++ $i; // 6

Здесь же сначала результат будет вычислен, только потом произойдёт инкремент:

$i = 0;
5 + $i++; // 5

В Вашем случае выполняться только одна инструкция (собственно, сам инкремент), поэтому разницы нет.

Answer 3

В данном случае разницы никакой нету

http://www.php.su/learnphp/operators/?prior Ссылка на ответ к вопросу автора

READ ALSO
Поле UUID в Базе Данных

Поле UUID в Базе Данных

Приветствую! Возникла проблема в том чтобы сделать поле в таблицы, которое будет генерировать уникальное значениеНужно оно для создания...

301