Какова цель использования & перед аргументом функции? - PullRequest
29 голосов
/ 26 ноября 2010

Я видел некоторые объявления функций вроде этого:

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

что делает символ &?

Ответы [ 7 ]

49 голосов
/ 26 ноября 2010

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

function foo(&$bar)
{
  $bar = 1;
}

$x = 0;
foo($x);
echo $x; // 1
20 голосов
/ 26 ноября 2010

В основном, если вы измените $var внутри функции, она будет изменена снаружи.Например:

$var = 2;

function f1(&$param) {
    $param = 5;
}

echo $var; //outputs 2
f1($var);
echo $var; //outputs 5
6 голосов
/ 26 ноября 2010

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

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

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

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

пример:

function boo(&$var) {
   $var = 10;
}

$var = 20;
echo $var; //gets 20
boo($var);
echo $var //gets 10
2 голосов
/ 26 ноября 2010

Это передача по ссылке .

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

За исключением того, что в этом нет необходимостиразыменовать его (например, C).

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

Амперсанд (&) перед переопределением переменной (& $ 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.
0 голосов
/ 23 февраля 2018

Если какая-либо функция начинается с амперсанда (&), это означает, что ее вызов осуществляется через функцию Reference.Он вернет ссылку на переменную вместо значения.

function reference_function( &$total ){
  $extra = $total + 10;
}

$total = 200;
reference_function($total) ;
echo $total; //OutPut 210
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...