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