PHP: Ссылки
Ссылка является специальным значением, которое ссылается непосредственно на область памяти, содержащую значение.
Ссылки позволяют создать две (и более) переменные указывающие на одно и тоже значение. Изменение значения в одной переменной отражается на другой переменной, и наоборот.
Чтобы присвоить ссылку, нужно добавить знак амперсанд (&) перед именем присваиваемой переменной:
<?php $x = 10; $y = &$x; // $y теперь ссылается на ту же область памяти, что и $x $y = 20; echo $x; // 20 ?>
Такой способ присвоения значений переменным называется присвоением по ссылке.
По ссылке допускается присваивать только переменные:
$num = 11; $foo = &$num; // Допустимо $foo = &(4 * 9); // Не допустимо
Если переменной, объявленной внутри функции как global, будет присвоена ссылка, то эта ссылка будет видна только внутри функции. Чтобы избежать этого, нужно использовать массив $GLOBALS:
<?php
$var1 = "Hello";
$var2 = "";
function foo($test) {
global $var1, $var2;
if (!$test) {
$var2 = &$var1; // Видна только внутри функции
echo '$var2 внутри функции: ', "$var2
";
}
else
$GLOBALS["var2"] = &$var1; // Видна в глобальном контексте
}
foo(false);
echo '$var2: ' . "$var2
"; // $var2: ''
foo(true);
echo '$var2: ' . "$var2
"; // $var2: 'Hello'
?>
На самом деле запись global $var; является сокращением от $var = &$GLOBALS['var'];, то есть фактически локальной переменной $var просто присваивается ссылка на значение одноимённой глобальной переменной.