0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы изучим ссылки. Эта тема немного своеобразная: механизм ссылок напрямую используется редко.</p>
1
<p>В этом уроке мы изучим ссылки. Эта тема немного своеобразная: механизм ссылок напрямую используется редко.</p>
2
<p>Но это все равно важная тема. Когда мы начнем использовать массивы и объекты, нам понадобится понимание того, как ссылки работают.</p>
2
<p>Но это все равно важная тема. Когда мы начнем использовать массивы и объекты, нам понадобится понимание того, как ссылки работают.</p>
3
<p>Не относитесь к этому материалу слишком серьезно. Главное - уловить концепцию и знать само понятие, все остальное по необходимости.</p>
3
<p>Не относитесь к этому материалу слишком серьезно. Главное - уловить концепцию и знать само понятие, все остальное по необходимости.</p>
4
<p>Ссылки в PHP - это средство доступа к содержимому одной переменной под разными именами.</p>
4
<p>Ссылки в PHP - это средство доступа к содержимому одной переменной под разными именами.</p>
5
<p>Так работает доступ без ссылок:</p>
5
<p>Так работает доступ без ссылок:</p>
6
<p>А теперь попробуем использовать ссылки:</p>
6
<p>А теперь попробуем использовать ссылки:</p>
7
<p>Запись =& говорит, что переменная слева начинает указывать на те же данные, что и переменная в правой части выражения.</p>
7
<p>Запись =& говорит, что переменная слева начинает указывать на те же данные, что и переменная в правой части выражения.</p>
8
<p>Здесь стоит сказать: если вы запомнили переменные как коробочки, которые содержат внутри себя данные, то это не совсем верная аналогия. На самом деле, данные хранятся отдельно, а переменные - отдельно. Поэтому правильно говорить, что переменные<strong>ссылаются</strong>на свои данные.</p>
8
<p>Здесь стоит сказать: если вы запомнили переменные как коробочки, которые содержат внутри себя данные, то это не совсем верная аналогия. На самом деле, данные хранятся отдельно, а переменные - отдельно. Поэтому правильно говорить, что переменные<strong>ссылаются</strong>на свои данные.</p>
9
<p>Рассмотрим первую ситуацию подробнее:</p>
9
<p>Рассмотрим первую ситуацию подробнее:</p>
10
<p>В этом коде переменная $a связывается с числом 5. Затем мы выполняем присвоение $b = $a. Несмотря на то, что справа стоит $a, правильно этот код воспринимать как $b = 5. Другими словами, вместо $a подставляется ее значение, которое становится значением $b.</p>
10
<p>В этом коде переменная $a связывается с числом 5. Затем мы выполняем присвоение $b = $a. Несмотря на то, что справа стоит $a, правильно этот код воспринимать как $b = 5. Другими словами, вместо $a подставляется ее значение, которое становится значением $b.</p>
11
<p>Эти переменные не имеют между собой ничего общего, они не ссылаются на одни и те же данные. Это может показаться странным, ведь и там, и там записано одно и то же. Но это не так - у каждой переменной своя собственная пятерка.</p>
11
<p>Эти переменные не имеют между собой ничего общего, они не ссылаются на одни и те же данные. Это может показаться странным, ведь и там, и там записано одно и то же. Но это не так - у каждой переменной своя собственная пятерка.</p>
12
<p>Но все меняется, если во время присвоения добавить амперсанд: $b =& $a. Теперь $b и $a ссылаются на одно и то же значение. Если поменять его в $b, то оно поменяется и для $a. Обратное тоже верно. $a и $b здесь абсолютно эквивалентны, но это не означает, что $a указывает на $b, или наоборот. Это означает, что $a и $b указывают на одно и то же значение.</p>
12
<p>Но все меняется, если во время присвоения добавить амперсанд: $b =& $a. Теперь $b и $a ссылаются на одно и то же значение. Если поменять его в $b, то оно поменяется и для $a. Обратное тоже верно. $a и $b здесь абсолютно эквивалентны, но это не означает, что $a указывает на $b, или наоборот. Это означает, что $a и $b указывают на одно и то же значение.</p>
13
<p>Вероятно, сейчас вы чувствуете легкое замешательство. Если это так - не переживайте, это нормально. Тема ссылок - вещь, которую сложно понять и прочувствовать, прочитав один урок.</p>
13
<p>Вероятно, сейчас вы чувствуете легкое замешательство. Если это так - не переживайте, это нормально. Тема ссылок - вещь, которую сложно понять и прочувствовать, прочитав один урок.</p>
14
<p>Есть три основных операции с использованием ссылок:</p>
14
<p>Есть три основных операции с использованием ссылок:</p>
15
<ul><li>Присвоение по ссылке</li>
15
<ul><li>Присвоение по ссылке</li>
16
<li>Передача по ссылке</li>
16
<li>Передача по ссылке</li>
17
<li>Возврат по ссылке</li>
17
<li>Возврат по ссылке</li>
18
</ul><p>Выше мы рассматривали довольно искусственные примеры. Практически единственное место, где ссылки встречаются в реальной жизни - аргументы функций, причем встроенные в сам язык. В основном это касается массивов, с которыми мы познакомимся позже. А пока посмотрим на этот прием без них:</p>
18
</ul><p>Выше мы рассматривали довольно искусственные примеры. Практически единственное место, где ссылки встречаются в реальной жизни - аргументы функций, причем встроенные в сам язык. В основном это касается массивов, с которыми мы познакомимся позже. А пока посмотрим на этот прием без них:</p>
19
<p>В этом примере сама функция декларирует, что ее аргумент передается по ссылке. Самое неприятное - вы об этом даже не узнаете, если внимательно не прочитаете документацию. Обычно такие функции ничего не возвращают, они меняют аргументы, что, кстати, считается плохой практикой. Подобное поведение имеет смысл только в некоторых ситуациях, где крайне важна производительность - например, при сортировке массивов.</p>
19
<p>В этом примере сама функция декларирует, что ее аргумент передается по ссылке. Самое неприятное - вы об этом даже не узнаете, если внимательно не прочитаете документацию. Обычно такие функции ничего не возвращают, они меняют аргументы, что, кстати, считается плохой практикой. Подобное поведение имеет смысл только в некоторых ситуациях, где крайне важна производительность - например, при сортировке массивов.</p>
20
<p>Особняком стоят объекты, которые всегда передаются по ссылке. Об этом рассказывается в следующих курсах.</p>
20
<p>Особняком стоят объекты, которые всегда передаются по ссылке. Об этом рассказывается в следующих курсах.</p>