Что означает = и означает в PHP?

Рассмотрим:

$smarty =& SESmarty::getInstance();

Что такое & для?

Ответ 1

Он проходит по ссылке. Это означает, что он не создаст копию переданного значения.

См: http://php.net/manual/en/language.references.php (см. ответ Адама)

Обычно, если вы передаете что-то вроде этого:

$a = 5;
$b = $a;
$b = 3;

echo $a; // 5
echo $b; // 3

Исходная переменная ($a) не будет изменена, если вы измените вторую переменную ($b). Если вы пройдете по ссылке:

$a = 5;
$b =& $a;
$b = 3;

echo $a; // 3
echo $b; // 3

Оригинал также изменен.

Что бесполезно при обходе объектов, поскольку по умолчанию они будут переданы по ссылке.

Ответ 2

В PHP & nbs 4 4 это (неловко) связано с двумя переменными.

$j = 'original';
$i =& $j;
$i = 'modified';
echo $j; // The output is 'modified'

Аналогично...

$j = 'original';
$i =& $j;
$j = 'modified';
echo $i; // The output is 'modified'

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

Ответ 3

References используются для переменных псевдонимов и необходимы для эффективного использования старой системы объектов.

В PHP 4 объекты ведут себя как любой другой тип значения, т.е. присваивание создаст копию объекта. Если вы хотели этого избежать, вам нужно было использовать ссылку, как в вашем примере кода.

С PHP 5 переменные объекта больше не содержат самого объекта, но дескриптор (идентификатор объекта AKA) и присваивание будут копироваться только рукоять. Использование ссылки больше не требуется.