Я написал и играл со многими функциями и переменными 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; ?>
Это ссылка. Он позволяет двум именам переменных указывать на один и тот же контент.