Оба эти заявления 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 сохраняет ее значение.
Если вы имели в виду thing
с $
перед ними, то да, оба назначаются по ссылке. Подробнее о ссылках на PHP вы можете узнать здесь: http://www.php.net/manual/en/language.references.whatdo.php
Да, так и есть. $o
станет ссылкой на thing
в обоих случаях (я предполагаю, что thing
не является константой, а фактически чем-то значимым как переменная).