开发者

What does the PHP operator =& mean? [duplicate]

This question already has answers here: Closed 12 years ago.

Possible Duplicate: What do the "=&" and "&=" operators in PHP mean?

I found the operator "=&" in the following code, and I do not know what it means. What does it mean and what does it do?

The code where I read it:

function ContentParseRoute($segments)
{
    $vars = array();

    //Get the active menu item
    $menu =& JSite::getMenu();
    $item 开发者_运维百科=& $menu->getActive();

    // Count route segments
    $count = count($segments);
        ....


This isn't an assignment (=) by reference (&).

If you were to say:

$a = 42;
$b =& $a;

You are actually saying assign $a by reference to $b.

What assigning by reference does is "tie" the two variables together. Now, if you were to modify $a later on, $b would change with it.

For example:

$a = 42;
$b =& $a;

//later
echo $a; // 42
echo $b; // 42

$a = 13;
echo $a; // 13
echo $b; // 13

EDIT:

As Artefacto points out in the comments, $a =& $b is not the same as $a = (&$b).

This is because while the & operator means make a reference out of something, the = operator does assign-by-value, so the expression $a = (&$b) means make a temporary reference to $b, then assign the value of that temporary to $a, which is not assign-by-reference.


It is the referential assignment operator.

This means that when you modify the LHS of the operator later on in code, it will modify the RHS. You are pointing the LHS to the same block of memory that the RHS occupies.


Here's an example of it in use:

$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

Not an explanation, but an example of being able to use the & operator without using it in an =& assignment.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜