Как символ «&» в PHP влияет на результат? - PullRequest
4 голосов
/ 16 июня 2009

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

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

Например:

$variable1 =& $variable2;

OR

function &usethisfunction() {
}

OR

function usethisfunction(&thisvariable) {
{

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

Ответы [ 3 ]

7 голосов
/ 16 июня 2009

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

Вот пример некоторого "обычного" кода 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.

2 голосов
/ 16 июня 2009
<?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;        
?>
1 голос
/ 16 июня 2009

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

...