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 < strlen($str), и после каждого шага $i увеличивается на 1</p>
4
<blockquote><p>Цикл с индексом $i повторяется, пока соблюдается условие $i < 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>