Рассматривать:
$smarty =& SESmarty::getInstance();
Что такое &
for?
Он проходит по ссылке. Это означает, что он не создаст копию переданного значения.
См. 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
Оригинал также изменен.
Что бесполезно при обходе объектов, потому что по умолчанию они будут переданы по ссылке.
В PHP 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 , но я думаю, что это одно и то же, поэтому эти примеры должны быть действительными.
Ссылки используются для переменных псевдонимов и необходимы для эффективного использования старой объектной системы.
В PHP 4 объекты ведут себя как любой другой тип значения, т. Е. Присваивание создаст копию объекта. Если вы хотели этого избежать, вам нужно было использовать ссылку, как в вашем примере кода.
С PHP 5 переменные объекта больше не содержат самого объекта, но дескриптор (идентификатор объекта AKA) и присваивание копируют только дескриптор. Использование ссылки больше не требуется.