Основы PHP
2026-02-26 16:40 Diff

Цикл while идеален для ситуаций, когда количество итераций неизвестно заранее — например, при поиске простого числа. Когда количество итераций известно, предпочтительнее использовать цикл for. Именно его мы изучим в этом уроке.

Посмотрим реализацию переворота строки через цикл for:

Этот код можно прочитать так:

Цикл с индексом $i повторяется, пока соблюдается условие $i < strlen($str), и после каждого шага $i увеличивается на 1

Посмотрим, что находится в круглых скобках:

  1. Начальное значение счетчика — этот код выполняется ровно один раз перед первой итерацией
  2. Предикат (условие повторения циклов) — выполняется на каждой итерации, как и в while
  3. Описание изменения счетчика — этот код выполняется в конце каждой итерации

В остальном принцип работы точно такой же, как у цикла while.

Синтаксический сахар

В функции выше мы использовали новую синтаксическую конструкцию $i += 1. Подобные конструкции в PHP используются довольно часто. Это сокращенный вариант записи: $i = $i + 1.

Такие сокращения называют синтаксическим сахаром, потому что они делают процесс написания кода немного проще и приятнее — «подслащивают» его.

Важно понимать, что отличия исключительно в способе записи. Интерпретатор превращает сокращенную конструкцию в развернутую.

Существуют сокращенные формы для всех арифметических операций и для конкатенации строк:

  • $a = $a + 1 то же самое, что и $a += 1
  • $a = $a - 1 то же самое, что и $a -= 1
  • $a = $a * 2 то же самое, что и $a *= 2
  • $a = $a / 1 то же самое, что и $a /= 1
  • $a = $a . 'bla' то же самое, что и $a .= 'bla'

Инкремент и декремент

Из языка Си в PHP перекочевали две операции:

  • Инкремент ++
  • Декремент --

Они очень часто встречаются вместе с циклами. Эти унарные операции увеличивают и уменьшают на единицу число, записанное в переменную:

При использовании префиксной формы все происходит наоборот. Сначала идет изменение переменной, а затем — возврат нового значения:

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

При использовании префиксной нотации сначала происходит изменение переменной, а потом — возврат. При использовании постфиксной нотации — наоборот: сначала возврат, а потом изменение переменной.

Правило работает одинаково для инкремента и декремента. Для простоты рассмотрим только инкремент:

Обсудим, что пошагово происходит в коде:

  1. Вывели на экран ++$x — это префиксный инкремент, поэтому сначала значение переменной увеличилось на 1, потом результат вернулся и вывелся на экран
  2. Значение изменилось, поэтому echo $x вывел 6
  3. Теперь выводим на экран $x++ — это постфиксный инкремент, поэтому сначала значение вернулось и вывелось на экран, а потом переменная увеличилась на 1
  4. Значение изменилось, поэтому echo $x вывел 7

Инкремент и декремент могут заметно усложнить код. Особенно сложно все становится, когда мы вставляем инкремент внутрь других операций: $x = $i++ - 7 + --$h.

Понять такой код невозможно, поэтому лучше не использовать такие конструкции. Например, в языке JavaScript при проверке кода линтер сразу начинает ругаться, когда видит использование инкремента и декремента.

Мы советуем пользоваться этими конструкциями так:

  • В рамках одного выражения никогда не смешивайте функции без побочных эффектов с функциями с побочными эффектами (то же самое касается операций)
  • Используйте инкремент и декремент только там, где нет разницы между префиксным и постфиксным вариантом: отдельно от всего, на своей собственной строчке кода