Почему независимо от того какой инкремент употребляется в цикле for, результат получается один и тот же?
Пример 1:
<?php
$sum = 0; // при первом проходе запишется 1
$count = 0;
for ($i= 1; $sum <= 1; ++$i) {
$sum += $i;
$count++;
}
echo $count;
?>
Пример 2:
<?php
$sum = 0; // при первом проходе запишется 1
$count = 0;
for ($i= 1; $sum <= 1; $i++) {
$sum += $i;
$count++;
}
echo $count;
?>
Ответы (2 шт):
Автор решения: Grundy
→ Ссылка
Разница инкрементов состоит в разных возвращаемых значениях
В коде из вопроса, возвращаемое значение инкремента не используется, поэтому и разницы в работе не видно.
Чтобы увидеть разницу, надо суммировать значение, которое возвращает оператор инкремента, а не значение переменной $i:
$sum = 0;
$count = 0;
for ($i= 1; $sum <= 1; $sum += ++$i) {
$count++;
}
echo "$count, $sum\n";
$sum = 0;
$count = 0;
for ($i= 1; $sum <= 1; $sum += $i++) {
$count++;
}
echo "$count, $sum\n";
Автор решения: Алексей Шиманский
→ Ссылка
Если прочесть документацию, то увидим, что цикл for
схематично выглядит так:
for (expr1; expr2; expr3)
statement
А выражение expr3
вычисляется (выполняется) только в конце каждой итерации. То есть после всех вычислений, которые находятся в фигурных скобках. Получается, что в данном случае это ни на что не влияет.