Я видел некоторые объявления функций вроде этого:
function boo(&$var){
...
}
что делает символ &
?
Я видел некоторые объявления функций вроде этого:
function boo(&$var){
...
}
что делает символ &
?
Это пропуск по ссылке. Переменная внутри функции "указывает" на те же данные, что и переменная из вызывающего контекста.
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!"
), будут влиять на переменную, переданную вызывающей функцией.
Амперсанд (и) перед переопределением переменной (и $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.
вы передаете $var в качестве ссылки, то есть фактическое значение переменной $var обновляется, когда оно изменяется внутри функции boo
Пример:
function boo(&$var) {
$var = 10;
}
$var = 20;
echo $var; //gets 20
boo($var);
echo $var //gets 10
Если вы знакомы с указателями C, это похоже на передачу указателя на переменную.
Кроме того, нет необходимости разыменовывать его (например, C).