Возможный дубликат: Что означают операторы "= &" и "& =" в PHP?
Я нашел оператор "= &" в следующий код, и я не знаю, что это значит. Что это значит и что это делает?
Код, в котором я его прочитал :
function ContentParseRoute($segments) { $vars = array(); //Get the active menu item $menu =& JSite::getMenu(); $item =& $menu->getActive(); // Count route segments $count = count($segments); ....
Это не задание ( =
) по ссылке ( &
).
Если бы вы сказали:
$a = 42;
$b =& $a;
Вы на самом деле назначаете $ a
по ссылке на $ b
.
Назначение по ссылке «связывает» две переменные вместе. Теперь, если вы позже измените $ a
, $ b
изменится вместе с ним.
Например:
$a = 42;
$b =& $a;
//later
echo $a; // 42
echo $b; // 42
$a = 13;
echo $a; // 13
echo $b; // 13
РЕДАКТИРОВАТЬ:
Как Артефакто указывает в комментариях, $ a = & $ b
- это не то же самое, что $ a = (& $ b)
.
Это связано с тем, что, хотя оператор &
означает создание ссылки из чего-либо, оператор =
присваивает значение по значению , поэтому выражение $ a = (& $ b)
означает создание временной ссылки на $ b
, затем присвоение значения этого временного значения $ a
, которое равно не присвоить по ссылке.
Вот пример его использования:
$array = array('apple', 'orange', 'banana');
// Without &
foreach($array as $d)
{
$d = 'fruit';
}
echo implode(', ', $array); // apple, orange, banana
// With &
foreach($array as &$d)
{
$d = 'fruit';
}
echo implode(', ', $array); // fruit, fruit, fruit
Не объяснение, а пример того, как можно использовать оператор &
без использования его в присваивании =&
.
Это оператор ссылочного присваивания .
Это означает, что при изменении LHS оператора позже в коде он изменит и RHS. Вы указываете LHS на тот же блок памяти, который занимает RHS.