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
просто присваивается ссылка на значение одноимённой глобальной переменной.