Ссылки в PHP


Ссылки в PHP позволяют работать с переменными, ссылаясь на одну и ту же область памяти, что предоставляет больше гибкости в программировании. Это особенно полезно при передаче параметров в функции и при изменении значений нескольких переменных, указывающих на одно и то же место в памяти. Для создания ссылки перед переменной используется символ амперсанда &.
Копирование значений переменных
Для начала рассмотрим простой пример, когда одна переменная копирует значение другой:
<?php $kira = "Кира"; $vika = $kira; $vika = "Вика"; echo "kira = $kira <br>"; // kira = Кира echo "vika = $vika"; // vika = Вика ?>
Здесь переменной $vika присваивается значение переменной $kira ("Кира"). Затем переменной $vika присваивается новое значение - "Вика". В результате:
kira = Кира
vika = Вика
Передача по ссылке
Теперь посмотрим на ситуацию, когда переменная ссылается на другую переменную:
<?php $kira = "Кира"; $vika = &$kira; // передача ссылки $vika = "Вика"; echo "kira = $kira <br>"; // kira = Вика echo "vika = $vika"; // vika = Вика ?>
В данном примере выражение $vika = &$kira; создаёт ссылку на переменную $kira. Теперь обе переменные указывают на одну и ту же область памяти. Изменение значения одной переменной приводит к изменению значения другой, потому что они ссылаются на одно и то же место:
kira = Вика
vika = Вика
Таким образом, изменение значения $vika меняет и значение $kira, поскольку они связаны ссылкой.
Передача параметров по ссылке
Кроме копирования переменных, ссылки можно использовать при передаче параметров в функции. Рассмотрим два способа передачи параметров: по значению и по ссылке.
Передача по значению
Стандартный способ передачи параметра - это передача по значению:
<?php function square($a) { $a *= $a; echo "a = $a"; } $number = 5; square($number); echo "<br>number = $number"; ?>
Результат программы:
a = 25
number = 5
Здесь значение переменной $a внутри функции возводится в квадрат, но исходная переменная $number не изменяется, так как передача параметра происходит по значению.
Передача по ссылке
Теперь рассмотрим передачу параметра по ссылке:
<?php function square(&$a) { $a *= $a; echo "a = $a"; } $number = 5; square($number); echo "<br>number = $number"; ?>
Результат:
a = 25
number = 25
Передача по ссылке осуществляется с помощью амперсанда & перед параметром функции: function square(&$a). Теперь переменная $a внутри функции и переменная $number будут указывать на одну и ту же область памяти. Это приводит к изменению исходной переменной после выполнения функции.
Возвращение ссылки из функции
Функции в PHP могут не только принимать параметры по ссылке, но и возвращать ссылки. Для этого перед именем функции также указывается символ амперсанда:
<?php function &checkName(&$name) { if($name === "admin") $name = "Кира"; return $name; } $userName = "admin"; $checkedName = &checkName($userName); echo "<br>userName: $userName"; echo "<br>checkedName: $checkedName"; ?>
В этой функции checkName() параметр передаётся по ссылке и функция возвращает ссылку на переменную $userName. При изменении значения внутри функции это изменение отразится и на исходной переменной.
Результат программы:
userName: Кира
checkedName: Кира
Заключение
Использование ссылок в PHP предоставляет мощные возможности для управления данными в памяти. Ссылки позволяют эффективно изменять значения переменных, избегая лишнего копирования данных. Это может быть полезно в сложных программах, где важно контролировать использование памяти и избегать избыточных операций с данными.