Ответ 1
Да, они оба то же самое. Они просто берут ссылку на объект и ссылаются на него в переменной $o
. Обратите внимание: thing
должен быть переменным.
Оба этих оператора PHP делают одно и то же:
$o =& $thing;
$o = &$thing;
Да, они оба то же самое. Они просто берут ссылку на объект и ссылаются на него в переменной $o
. Обратите внимание: thing
должен быть переменным.
Они не то же самое, синтаксически говоря. Оператор - это атомный = &, и это действительно имеет значение. Например, вы не можете использовать оператор = & в тройном выражении. Ни один из следующих действий не является допустимым синтаксисом:
$f = isset($field[0]) ? &$field[0] : &$field;
$f =& isset($field[0]) ? $field[0] : $field;
Поэтому вместо этого вы должны использовать это:
isset($field[0]) ? $f =& $field[0] : $f =& $field;
Они оба дают ожидаемую ошибку T_PAAMAYIM_NEKUDOTAYIM.
Если вы имели в виду $o = &$thing;
, то это присваивает ссылку на вещь на o. Вот пример:
$thing = "foo";
$o = &$thing;
echo $o; // echos foo
$thing = "bar";
echo $o; // echos bar
Разница очень важна:
<?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 сохраняет ее значение.
Да, да. $o
станет reference до thing
в обоих случаях (я предполагаю, что thing
не является константой, а фактически чем-то значимым как переменная).
Если вы имели в виду thing
с $
перед ними, то да, оба назначаются по ссылке. Вы можете узнать больше о ссылках на PHP здесь: http://www.php.net/manual/en/language.references.whatdo.php