Какова цель использования & перед аргументом функции?

Я видел некоторые объявления функций следующим образом:

function boo(&$var){ ... } 

что делает & character?

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

 function foo(&$bar) { $bar = 1; } $x = 0; foo($x); echo $x; // 1 

В принципе, если вы меняете $var внутри функции, она меняется на внешнюю сторону. Например:

 $var = 2; function f1(&$param) { $param = 5; } echo $var; //outputs 2 f1($var); echo $var; //outputs 5 

Он принимает ссылку на переменную в качестве параметра.

Это означает, что любые изменения, которые функция выполняет для параметра (например, $var = "Hi!" ), Будут влиять на переменную, переданную вызывающей функцией.

вы передаете $ var в качестве ссылки, то есть фактическое значение $ var обновляется, когда оно изменяется внутри функции boo

пример:

 function boo(&$var) { $var = 10; } $var = 20; echo $var; //gets 20 boo($var); echo $var //gets 10 

Амперсанд (&) перед переопределением переменной (& $ foo) проходит по значению, чтобы указать, что вы хотите передать переменную по ссылке вместо этого.

Например, если у вас есть это:

 function doStuff($variable) { $variable++; } $foo = 1; doStuff($foo); echo $foo; // output is '1' because you passed the value, but it doesn't alter the original variable doStuff( &$foo ); // this is deprecated and will throw notices in PHP 5.3+ echo $foo; // output is '2' because you passed the reference and php will alter the original variable. 

Он работает в обоих направлениях.

 function doStuff( &$variable) { $variable++; } $foo = 1; doStuff($foo); echo $foo; // output is '2' because the declaration of the function requires a reference. 

Это пропуск по ссылке .

Если вы знакомы с указателями C, это похоже на передачу указателя на переменную.

Кроме того, нет необходимости разыгрывать его (например, C).