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.
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.
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.