Функция, переданная с аргументом, поскольку "& $ x" выводит значение, а не ошибку, см. код ниже - PullRequest
3 голосов
/ 19 ноября 2010

Ниже приведен код, который выводит «15», почему?

function zz(&$x){

$x = $x + 5;

}

$x = 10;

zz($x);
echo $x;

Пожалуйста, объясните

Ответы [ 6 ]

6 голосов
/ 19 ноября 2010

Работает как задумано.Используя &, вы передаете $x по ссылке, что означает, что все, что функция делает с переменной, будет выполнено с исходным $x, для которого установлено 10.

Если вы использовали

function zz($x)

исходный $x будет оставаться на 10, потому что только переменная значение передается функции.

3 голосов
/ 19 ноября 2010

вы передаете значение в качестве аргумента не прямое значение переменной, а ее передачу по ссылке, поэтому вы получите 15 в качестве вывода.

Спасибо!

2 голосов
/ 19 ноября 2010

Поскольку сигнатура функции определяет, что значение, переданное функции, должно передаваться по ссылке.

Если вы не знаете, что это значит, я предлагаю прочитать этот абзац в Википедии .

1 голос
/ 19 ноября 2010

Использование & Ampersand: передача по ссылке соответствует цели в функции.

Просто измените исходную переменную и верните ее снова к тому же имени переменной с назначенным ей новым значением.

1 голос
/ 19 ноября 2010

$x внутри функции - это ссылка на то же значение, что и $x вне вашей функции.

Когда функция принимает параметр с символом «&», ее значение не копируется в новыйпеременная, созданная внутри области действия функции, но являющаяся ссылкой на то же значение, что и заданный аргумент.

См. здесь .

1 голос
/ 19 ноября 2010

Добавление & означает, что вы передаете переменную $ x по ссылке.Значение снаружи изменяется внутри функции вместо копии внутри изменяемой функции.

...