В чем разница между префиксным и постфиксным инкрементом и декрементом в PHP?

Ответ

Принцип одинаков для операций инкремента (++) и декремента (--): разница в моменте возврата значения.

  • Префиксная форма (++$i, --$i): изменить -> вернуть. Сначала значение переменной изменяется (увеличивается или уменьшается на 1), затем возвращается новое значение.
  • Постфиксная форма ($i++, $i--): вернуть -> изменить. Сначала возвращается текущее значение переменной, и только потом оно изменяется.

Пример, демонстрирующий разницу для обеих операций:

$value = 5;
echo ++$value; // Вывод: 6. Значение стало 6, затем выведено.
echo $value--; // Вывод: 6. Выведено текущее значение (6), затем оно уменьшилось до 5.
echo $value;   // Вывод: 5. Проверка финального состояния.

Ключевой момент: В изолированных операциях (например, $i++; на отдельной строке) форма не имеет значения для итогового значения переменной, но влияет на результат выражения, частью которого является эта операция.

Ответ 18+ 🔞

А, ну вот, классика жанра, ёпта! Сидишь такой, пишешь код, и тут бац — инкремент или декремент. А какой, блядь, поставить? Плюсы до или после? И тут начинается волнение ебать, потому что разница-то есть, и она нехилая!

Представь себе бутылку пива. Полная. Вот это переменная $i.

  • Префиксная форма (++$i) — это как взять полную бутылку, отхлебнуть сразу, а потом уже протянуть другу со словами «на, выпей».

    • Действие: Изменил (выпил) -> Вернул (отдал).
    • Друг получает уже неполную бутылку. Новое значение.
  • Постфиксная форма ($i++) — это сначала протянуть другу полную бутылку, сказать «держи», а потом уже, когда он взял, быстренько у неё отхлебнуть самому.

    • Действие: Вернул (отдал) -> Изменил (выпил).
    • Друг получил полную (старое значение), а у тебя в руках осталась неполная.

С декрементом (--) та же самая песня, только вместо пива, допустим, печенье. Съел до или съел после передачи — суть та же.

Смотри, как это выглядит в коде, чтобы вообще ни у кого вопросов не осталось:

$value = 5; // Вот тебе целых пять печенек, не хочу я их, забирай.

echo ++$value; // Ты берёшь пачку, быстренько одну печеньку съедаешь ДО того, как посмотреть, что там. Осталось 4. И выводится это новое число: 6? Стоп. Нет, блядь. Съел одну из пяти? Осталось 4. Э, нет, погоди. Ёб твою мать, я сам запутался. Давай по-честному.

$value = 5;
echo ++$value; // Действие: Сначала $value становится 6. Потом echo видит эту шестёрку. Вывод: 6.
echo $value--; // Действие: Сначала echo видит текущую $value (она же 6). Выводит 6. ПОТОМ $value уменьшается до 5.
echo $value;   // Проверяем, что в сухом остатке. Вывод: 5. Всё логично, как будто с утра.

А теперь самый важный момент, где все обламываются: Если операция стоит одна, сама по себе, в рот меня чих-пых, то пофиг. $i++; или ++$i; на отдельной строке — переменная в любом случае изменится. Проблемы начинаются, когда это часть какого-то выражения, присваивания или, как в примере, передачи в функцию (echo). Вот тут-то и решается, что ты вернёшь — старое значение или новое.

Короче, запомни: Сначала действие или сначала отдача? Всё от этого и пляши. Не ошибёшься.