Что делает оператор =&
(equals-амперсанд) в PHP?
Неужели это устарело?
Что делает оператор =&
(equals-амперсанд) в PHP?
Неужели это устарело?
Он не устарел и вряд ли будет. Это стандартный способ, например, сделать часть одного или другого зеркального отображения объекта другим, вместо копирования существующих данных.
Он называется присваиванием по ссылке, который, цитируя руководство, "означает, что обе переменные в конечном итоге указывают на одни и те же данные, и ничего не копируется в любом месте" .
Единственное, что устарело с =&
, - это "назначение результата 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. Эта страница является частью серии по ссылкам - стоит потратить минуту, чтобы прочитать всю серию.
Это два разных оператора. =
является назначением, как вы, вероятно, знаете. И &
означает, что к переменной следует обращаться по ссылке, а не по значению.
$x = &$y['z'];
также имеет эффект создания $y['z']
, если он не существует, и установите его на null
.
Это предотвращает сообщения об ошибках, которые вы, возможно, хотели прочитать. Я еще не нашел документацию по этому поводу; возможно, новый в 5.3, насколько я знаю.
Цитата @Прокомментируйте здесь, поскольку это хорошо объясненный ответ на этот вопрос.
Извините, но это слишком упрощенно. $a = & $b означает, что переменная $a относится к той же вещи, что и $b. После это, $a = 5; также приведет к $b, имеющему 5.
Однако ссылка ссылка может быть разбита на $b = & $Хуга; или unset ($ b); В это время $a будет быть единственной переменной, которая знает, где находится ячейка, которая содержит 5.
Также будьте осторожны, если вы установите $a using = &, вы должны использовать = & в следующий раз (или unset ($ a)), чтобы изменить ссылку ссылки $a, в частности $a = NULL; не будет разорвать связь, он заменяет только 5 нулевым;