Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Цикл for Основы языка PHP

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

<?php

function reverseString($str)
{
    $result = '';

    for ($i = 0; $i < strlen($str); $i += 1) {
        $currentChar = $str[$i];
        $result = "{$currentChar}{$result}";
    }

    return $result;
}

Можно читать так: «цикл с индексом $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 перекочевали две операции: инкремент ++ и декремент --, которые очень часто встречаются вместе с циклами. Эти унарные операции увеличивают и уменьшают на единицу число, записанное в переменную.

<?php

$i = 0;
$i++; // 0
$i++; // 1

$i--; // 2
$i--; // 1

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

<?php

$i = 0;
++$i; // 1
++$i; // 2

--$i; // 1
--$i; // 0

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

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

<?php

$x = 5;

echo ++$x; // => 6
echo $x;   // => 6

echo $x++; // => 6
echo $x;   // => 7

Что происходит?

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

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

Рекомендации по использованию:

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

Дополнительные материалы

  1. Цикл for

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
1 июня 10 месяцев

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»