HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Цикл while идеален для ситуаций, когда количество итераций неизвестно заранее - например, при поиске простого числа. Когда количество итераций известно, предпочтительнее использовать цикл for. Именно его мы изучим в этом уроке.</p>
1 <p>Цикл while идеален для ситуаций, когда количество итераций неизвестно заранее - например, при поиске простого числа. Когда количество итераций известно, предпочтительнее использовать цикл for. Именно его мы изучим в этом уроке.</p>
2 <p>Посмотрим реализацию переворота строки через цикл for:</p>
2 <p>Посмотрим реализацию переворота строки через цикл for:</p>
3 <p>Этот код можно прочитать так:</p>
3 <p>Этот код можно прочитать так:</p>
4 <blockquote><p>Цикл с индексом $i повторяется, пока соблюдается условие $i &lt; strlen($str), и после каждого шага $i увеличивается на 1</p>
4 <blockquote><p>Цикл с индексом $i повторяется, пока соблюдается условие $i &lt; strlen($str), и после каждого шага $i увеличивается на 1</p>
5 </blockquote><p>Посмотрим, что находится в круглых скобках:</p>
5 </blockquote><p>Посмотрим, что находится в круглых скобках:</p>
6 <ol><li>Начальное значение счетчика - этот код выполняется ровно один раз перед первой итерацией</li>
6 <ol><li>Начальное значение счетчика - этот код выполняется ровно один раз перед первой итерацией</li>
7 <li>Предикат (условие повторения циклов) - выполняется на каждой итерации, как и в while</li>
7 <li>Предикат (условие повторения циклов) - выполняется на каждой итерации, как и в while</li>
8 <li>Описание изменения счетчика - этот код выполняется в конце каждой итерации</li>
8 <li>Описание изменения счетчика - этот код выполняется в конце каждой итерации</li>
9 </ol><p>В остальном принцип работы точно такой же, как у цикла while.</p>
9 </ol><p>В остальном принцип работы точно такой же, как у цикла while.</p>
10 <h2>Синтаксический сахар</h2>
10 <h2>Синтаксический сахар</h2>
11 <p>В функции выше мы использовали новую синтаксическую конструкцию $i += 1. Подобные конструкции в PHP используются довольно часто. Это сокращенный вариант записи: $i = $i + 1.</p>
11 <p>В функции выше мы использовали новую синтаксическую конструкцию $i += 1. Подобные конструкции в PHP используются довольно часто. Это сокращенный вариант записи: $i = $i + 1.</p>
12 <p>Такие сокращения называют<strong>синтаксическим сахаром</strong>, потому что они делают процесс написания кода немного проще и приятнее - "подслащивают" его.</p>
12 <p>Такие сокращения называют<strong>синтаксическим сахаром</strong>, потому что они делают процесс написания кода немного проще и приятнее - "подслащивают" его.</p>
13 <p>Важно понимать, что отличия исключительно в способе записи. Интерпретатор превращает сокращенную конструкцию в развернутую.</p>
13 <p>Важно понимать, что отличия исключительно в способе записи. Интерпретатор превращает сокращенную конструкцию в развернутую.</p>
14 <p>Существуют сокращенные формы для всех арифметических операций и для конкатенации строк:</p>
14 <p>Существуют сокращенные формы для всех арифметических операций и для конкатенации строк:</p>
15 <ul><li>$a = $a + 1 то же самое, что и $a += 1</li>
15 <ul><li>$a = $a + 1 то же самое, что и $a += 1</li>
16 <li>$a = $a - 1 то же самое, что и $a -= 1</li>
16 <li>$a = $a - 1 то же самое, что и $a -= 1</li>
17 <li>$a = $a * 2 то же самое, что и $a *= 2</li>
17 <li>$a = $a * 2 то же самое, что и $a *= 2</li>
18 <li>$a = $a / 1 то же самое, что и $a /= 1</li>
18 <li>$a = $a / 1 то же самое, что и $a /= 1</li>
19 <li>$a = $a . 'bla' то же самое, что и $a .= 'bla'</li>
19 <li>$a = $a . 'bla' то же самое, что и $a .= 'bla'</li>
20 </ul><h2>Инкремент и декремент</h2>
20 </ul><h2>Инкремент и декремент</h2>
21 <p>Из языка Си в PHP перекочевали две операции:</p>
21 <p>Из языка Си в PHP перекочевали две операции:</p>
22 <ul><li>Инкремент ++</li>
22 <ul><li>Инкремент ++</li>
23 <li>Декремент --</li>
23 <li>Декремент --</li>
24 </ul><p>Они очень часто встречаются вместе с циклами. Эти унарные операции увеличивают и уменьшают на единицу число, записанное в переменную:</p>
24 </ul><p>Они очень часто встречаются вместе с циклами. Эти унарные операции увеличивают и уменьшают на единицу число, записанное в переменную:</p>
25 <p>При использовании префиксной формы все происходит наоборот. Сначала идет изменение переменной, а затем - возврат нового значения:</p>
25 <p>При использовании префиксной формы все происходит наоборот. Сначала идет изменение переменной, а затем - возврат нового значения:</p>
26 <p>Кажется, что нет никакой разницы между постфиксной и префиксной формами. Но тут начинаются сложности. Все остальные операции не имеют побочных эффектов и просто возвращают новое значение. В отличие от них, инкремент и декремент не только возвращают значение, но и<strong>изменяют</strong>значение переменной.</p>
26 <p>Кажется, что нет никакой разницы между постфиксной и префиксной формами. Но тут начинаются сложности. Все остальные операции не имеют побочных эффектов и просто возвращают новое значение. В отличие от них, инкремент и декремент не только возвращают значение, но и<strong>изменяют</strong>значение переменной.</p>
27 <p>При использовании префиксной нотации сначала происходит изменение переменной, а потом - возврат. При использовании постфиксной нотации - наоборот: сначала возврат, а потом изменение переменной.</p>
27 <p>При использовании префиксной нотации сначала происходит изменение переменной, а потом - возврат. При использовании постфиксной нотации - наоборот: сначала возврат, а потом изменение переменной.</p>
28 <p>Правило работает одинаково для инкремента и декремента. Для простоты рассмотрим только инкремент:</p>
28 <p>Правило работает одинаково для инкремента и декремента. Для простоты рассмотрим только инкремент:</p>
29 <p>Обсудим, что пошагово происходит в коде:</p>
29 <p>Обсудим, что пошагово происходит в коде:</p>
30 <ol><li>Вывели на экран ++$x - это префиксный инкремент, поэтому сначала значение переменной увеличилось на 1, потом результат вернулся и вывелся на экран</li>
30 <ol><li>Вывели на экран ++$x - это префиксный инкремент, поэтому сначала значение переменной увеличилось на 1, потом результат вернулся и вывелся на экран</li>
31 <li>Значение изменилось, поэтому echo $x вывел 6</li>
31 <li>Значение изменилось, поэтому echo $x вывел 6</li>
32 <li>Теперь выводим на экран $x++ - это постфиксный инкремент, поэтому сначала значение вернулось и вывелось на экран, а потом переменная увеличилась на 1</li>
32 <li>Теперь выводим на экран $x++ - это постфиксный инкремент, поэтому сначала значение вернулось и вывелось на экран, а потом переменная увеличилась на 1</li>
33 <li>Значение изменилось, поэтому echo $x вывел 7</li>
33 <li>Значение изменилось, поэтому echo $x вывел 7</li>
34 </ol><p>Инкремент и декремент могут заметно усложнить код. Особенно сложно все становится, когда мы вставляем инкремент внутрь других операций: $x = $i++ - 7 + --$h.</p>
34 </ol><p>Инкремент и декремент могут заметно усложнить код. Особенно сложно все становится, когда мы вставляем инкремент внутрь других операций: $x = $i++ - 7 + --$h.</p>
35 <p>Понять такой код невозможно, поэтому лучше не использовать такие конструкции. Например, в языке JavaScript при проверке кода линтер сразу начинает ругаться, когда видит использование инкремента и декремента.</p>
35 <p>Понять такой код невозможно, поэтому лучше не использовать такие конструкции. Например, в языке JavaScript при проверке кода линтер сразу начинает ругаться, когда видит использование инкремента и декремента.</p>
36 <p>Мы советуем пользоваться этими конструкциями так:</p>
36 <p>Мы советуем пользоваться этими конструкциями так:</p>
37 <ul><li>В рамках одного выражения никогда не смешивайте функции без побочных эффектов с функциями с побочными эффектами (то же самое касается операций)</li>
37 <ul><li>В рамках одного выражения никогда не смешивайте функции без побочных эффектов с функциями с побочными эффектами (то же самое касается операций)</li>
38 <li>Используйте инкремент и декремент только там, где нет разницы между префиксным и постфиксным вариантом: отдельно от всего, на своей собственной строчке кода</li>
38 <li>Используйте инкремент и декремент только там, где нет разницы между префиксным и постфиксным вариантом: отдельно от всего, на своей собственной строчке кода</li>
39 </ul>
39 </ul>