tags:

views:

191

answers:

4
+4  A: 

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.

Jacob Relkin
LHS = Left Hand SideRHS = Right Hand Side
Htbaa
This is correct (at least you didn't say "these are actually two operators"). However, the last phrase is a bit misleading. In `$a = $b;`, `$b` will, in most cases, also point to the same memory block as `$a`. The difference is that the variable will be separated on modification, while if it is in a reference set, it will. It may be more accurate to say `The symbols on the LHS and the RHS are the same variable" or something to that effect, and leave out the "memory" reference.
Artefacto
+5  A: 

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.

Austin Hyde
-1 `$b = (
Artefacto
Really, now? I did not know that, and it never broke for me before (at least apparently). Guess you learn something every day. :) I'll edit my answer for this correction.
Austin Hyde
A: 

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.

bschaeffer
Artefacto