Я видел некоторые объявления функций следующим образом:
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).