Что означает & в PHP? - PullRequest
       2

Что означает & в PHP?

19 голосов
/ 17 января 2010

Рассмотрим:

$smarty =& SESmarty::getInstance();

Для чего нужен &? 1005 *

Ответы [ 3 ]

30 голосов
/ 17 января 2010

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

См: http://php.net/manual/en/language.references.php (см. Ответ Адама)

Обычно, если вы передаете что-то вроде этого:

$a = 5;
$b = $a;
$b = 3;

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

Исходная переменная ($a) не будет изменена, если вы измените вторую переменную ($b). Если вы передаете по ссылке:

$a = 5;
$b =& $a;
$b = 3;

echo $a; // 3
echo $b; // 3

Оригинал также изменен.

Что бесполезно при передаче объектов, поскольку по умолчанию они передаются по ссылке.

7 голосов
/ 17 января 2010

В PHP 4 это (неловко) связывало две переменные.

$j = 'original';
$i =& $j;
$i = 'modified';
echo $j; // The output is 'modified'

Точно так же ...

$j = 'original';
$i =& $j;
$j = 'modified';
echo $i; // The output is 'modified'

Часть этого была сделана немного менее неприятной, когда дело доходит до объектов в PHP 5 , но я думаю, что суть его та же, поэтому эти примеры должны быть действительными.

1 голос
/ 17 января 2010

Ссылки используются для псевдонимов переменных и были необходимы для эффективного использования старой объектной системы.

В PHP 4 объекты вели себя как любой другой тип значения, то есть при присваивании создавалась копия объекта. Если вы хотите избежать этого, вы должны использовать ссылку, как в примере кода.

При PHP 5 переменные объекта больше не содержат сам объект, но дескриптор (идентификатор объекта AKA) и присваивание будут только копировать дескриптор. Использовать ссылку больше не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...