Как символ «&» в PHP влияет на результат?

Я написал и играл со многими функциями и переменными PHP, где оригинальный автор написал оригинальный код, и мне пришлось продолжить разработку продукта, т.е. Компоненты Joomla / Модули / Плагины, и я всегда задавал этот вопрос:

Как символ «&», привязанный к функции или переменной, влияет на результат?

Например:

$variable1 =& $variable2; 

ИЛИ

 function &usethisfunction() { } 

ИЛИ

 function usethisfunction(&thisvariable) { { 

Я пробовал поиск в руководстве PHP и других связанных источниках, но не могу найти ничего, что конкретно касается моего вопроса.

Они известны как ссылки .

Вот пример некоторого «обычного» PHP-кода:

 function alterMe($var) { $var = 'hello'; } $test = 'hi'; alterMe($test); print $test; // prints hi $a = 'hi'; $b = $a; $a = 'hello'; print $b; // prints hi 

И это то, что вы можете достичь, используя ссылки:

 function alterMe(&$var) { $var = 'hello'; } $test = 'hi'; alterMe($test); print $test; // prints hello $a = 'hi'; $b &= $a; $a = 'hello'; print $b; // prints hello 

Подробные подробные сведения содержатся в документации. По существу, однако:

Ссылки на PHP – это средство доступа к одному и тому же содержимому переменной разными именами. Они не похожи на C-указатели; вместо этого они являются псевдонимами таблиц символов. Обратите внимание, что в PHP имя переменной и содержимое переменной различаются, поэтому один и тот же контент может иметь разные имена. Ближайшая аналогия с именами и файлами Unix – имена переменных – это записи в каталоге, а переменный контент – это сам файл. Ссылки можно сравнить с жесткой привязкой в ​​файловой системе Unix.

 <?php $a = "hello"; # $a points to a slot in memory that stores "hello" $b = $a; # $b holds what $a holds $a = "world"; echo $b; # prints "hello" 

Теперь, если мы добавим &

 $a = "hello"; # $a points to a slot in memory that stores "hello" $b = &$a; # $b points to the same address in memory as $a $a = "world"; # prints "world" because it points to the same address in memory as $a. # Basically it's 2 different variables pointing to the same address in memory echo $b; ?> 

Это ссылка. Он позволяет двум именам переменных указывать на один и тот же контент.