Оператор PHP = & - PullRequest
       22

Оператор PHP = &

45 голосов
/ 09 мая 2011

Оба эти оператора PHP делают одно и то же?:

$o =& $thing;

$o = &$thing;

Ответы [ 6 ]

38 голосов
/ 09 мая 2011

Да, они оба одно и то же. Они просто берут ссылку на объект и ссылаются на нее в переменной $o. Обратите внимание, thing должны быть переменными.

27 голосов
/ 15 июля 2012

Синтаксически это не одно и то же.Оператор является атомным = & , и это действительно имеет значение.Например, вы не можете использовать оператор = & в троичном выражении.Ни одно из следующего не является допустимым синтаксисом:

$f = isset($field[0]) ? &$field[0] : &$field;
$f =& isset($field[0]) ? $field[0] : $field;

Так что вместо этого вы бы использовали это:

isset($field[0]) ? $f =& $field[0] : $f =& $field;
13 голосов
/ 09 мая 2011

Они оба дают ожидаемую ошибку T_PAAMAYIM_NEKUDOTAYIM.

Если вы имели в виду $o = &$thing;, то это присваивает ссылку вещи на o. Вот пример:

$thing = "foo";

$o = &$thing;

echo $o; // echos foo

$thing = "bar";

echo $o; // echos bar
12 голосов
/ 19 февраля 2015

Разница очень важна:

<?php
$a = "exists";
$b = $a;
$c =& $a;
echo "a=".$a.", b=".$b.", c=".$c."<br/>"; //a=exists b=exists c=exists

$a = null;
echo "a=".$a.", b=".$b.", c=".$c; //a= b=exists c= 
?>

Переменная $ c умирает, когда $ a становится NULL, но переменная $ b сохраняет свое значение.

1 голос
/ 09 мая 2011

Если вы имели в виду thing с $ перед ними, то да, оба присваиваются по ссылке.Вы можете узнать больше о ссылках в PHP здесь: http://www.php.net/manual/en/language.references.whatdo.php

1 голос
/ 09 мая 2011

Да, они делают.$o станет ссылкой на thing в обоих случаях (я предполагаю, что thing не является константой, а фактически чем-то значимым в качестве переменной).

...