Зарегистрируйтесь, чтобы продолжить обучение

Ссылки Основы PHP

В этом уроке мы изучим ссылки. Эта тема немного своеобразная: механизм ссылок напрямую используется редко.

Но это все равно важная тема. Когда мы начнем использовать массивы и объекты, нам понадобится понимание того, как ссылки работают.

Не относитесь к этому материалу слишком серьезно. Главное — уловить концепцию и знать само понятие, все остальное по необходимости.

Ссылки в PHP — это средство доступа к содержимому одной переменной под разными именами.

Так работает доступ без ссылок:

<?php

$a = 5;
$b = $a;
$a = 3;
echo $b; // => 5

А теперь попробуем использовать ссылки:

<?php

$a = 5;
$b =& $a;
$a = 3;
echo $b; // => 3

Запись =& говорит, что переменная слева начинает указывать на те же данные, что и переменная в правой части выражения.

Здесь стоит сказать: если вы запомнили переменные как коробочки, которые содержат внутри себя данные, то это не совсем верная аналогия. На самом деле, данные хранятся отдельно, а переменные — отдельно. Поэтому правильно говорить, что переменные ссылаются на свои данные.

Рассмотрим первую ситуацию подробнее:

<?php

$a = 5;
$b = $a;

В этом коде переменная $a связывается с числом 5. Затем мы выполняем присвоение $b = $a. Несмотря на то, что справа стоит $a, правильно этот код воспринимать как $b = 5. Другими словами, вместо $a подставляется ее значение, которое становится значением $b.

Эти переменные не имеют между собой ничего общего, они не ссылаются на одни и те же данные. Это может показаться странным, ведь и там, и там записано одно и то же. Но это не так — у каждой переменной своя собственная пятерка.

Но все меняется, если во время присвоения добавить амперсанд: $b =& $a. Теперь $b и $a ссылаются на одно и то же значение. Если поменять его в $b, то оно поменяется и для $a. Обратное тоже верно. $a и $b здесь абсолютно эквивалентны, но это не означает, что $a указывает на $b, или наоборот. Это означает, что $a и $b указывают на одно и то же значение.

Вероятно, сейчас вы чувствуете легкое замешательство. Если это так — не переживайте, это нормально. Тема ссылок — вещь, которую сложно понять и прочувствовать, прочитав один урок.

Есть три основных операции с использованием ссылок:

  • Присвоение по ссылке
  • Передача по ссылке
  • Возврат по ссылке

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

<?php

// Либо так: function strangeFunction(&$text)
function strangeFunction(string &$text)
{
    $text = 'hei';
}

$text = 'money';

strangeFunction($text);
echo $text; // => hei

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

Особняком стоят объекты, которые всегда передаются по ссылке. Об этом рассказывается в следующих курсах.


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

  1. Официальная документация
  2. Пример функции работающей со ссылками: fscan

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

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

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

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 26 декабря

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

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

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

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»