Оператор присваивания ссылок в PHP, = &

Что делает оператор =& (equals-амперсанд) в PHP?

Неужели это устарело?

Ответ 1

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

Он называется присваиванием по ссылке, который, цитируя руководство, "означает, что обе переменные в конечном итоге указывают на одни и те же данные, и ничего не копируется в любом месте" .

Единственное, что устарело с =&, - это "назначение результата new по ссылке" в PHP 5, который может быть источником любая путаница. new автоматически присваивается ссылкой, поэтому & является избыточным/устаревшим в $o = &new C;, но не в $o = &$c;.


Так как трудно выполнить поиск, обратите внимание, что =& (равно амперсандам) совпадает с = & (равно амперсанду пространства) и часто записывается так, что он запускается в другую переменную типа $x = &$y['z']; или $x = &$someVar (имя переменной амперсанда и знака доллара). Пример, упрощенный из документов:

$a = 3;
$b = &$a;
$a = 4;
print "$b"; // prints 4

Здесь представлена ​​удобная ссылка на подробный раздел Назначить по ссылке в руководстве по PHP. Эта страница является частью серии по ссылкам - стоит потратить минуту, чтобы прочитать всю серию.

Ответ 2

Это два разных оператора. = является назначением, как вы, вероятно, знаете. И & означает, что к переменной следует обращаться по ссылке, а не по значению.

Ответ 3

$x = &$y['z'];

также имеет эффект создания $y['z'], если он не существует, и установите его на null.

Это предотвращает сообщения об ошибках, которые вы, возможно, хотели прочитать. Я еще не нашел документацию по этому поводу; возможно, новый в 5.3, насколько я знаю.

Ответ 4

Цитата @Прокомментируйте здесь, поскольку это хорошо объясненный ответ на этот вопрос.

Извините, но это слишком упрощенно. $a = & $b означает, что переменная $a относится к той же вещи, что и $b. После это, $a = 5; также приведет к $b, имеющему 5.

Однако ссылка ссылка может быть разбита на $b = & $Хуга; или unset ($ b); В это время $a будет быть единственной переменной, которая знает, где находится ячейка, которая содержит 5.

Также будьте осторожны, если вы установите $a using = &, вы должны использовать = & в следующий раз (или unset ($ a)), чтобы изменить ссылку ссылки $a, в частности $a = NULL; не будет разорвать связь, он заменяет только 5 нулевым;