views:

1016

answers:

4

Finding the answer to this is turning out to be much more difficult than I would have thought. Since I don't have a clue what you'd call this, it's hard to run a Google search since it will ignore those characters. I tried browsing the PHP Assignment Operators page, and even the other operators pages, and found nothing that told me exactly what they do. I don't just want to guess based on the single function I have that uses it. So what exactly do the '&=' and '=&' operators do? All I know is it sets a variable, which would be the '=' part, so I really need to know what the '&' part is doing.

Edit: Please don't say the obvious, I need someone to explain exactly what they do. I know one of them is 'bitwise', but that doesn't mean anything to me.

+6  A: 

=& is assigning by reference.

It assigns a variable not by value but by reference.

Example:

$a = 'foo';
$b =& $a;

$b = 'bar';

echo $a;

prints bar because $b has a reference to $a and therefore changing $b also changes the value of $a.


&= is bitwise AND.

Example:

$a = 4 // binary representation: 100
$b = 1 // binary representation: 001

Then $a &= $b is just short for $a = $a & $b and means: Take every bit and perform the AND operation, that is:

0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
0 & 0 = 0

Therefore

     1 0 0 
AND  0 0 1
     -----
     0 0 0

=> $a = 0 // bit representation 0 ;)
Felix Kling
Your AND is an OR
Gordon
@Gordon: Uups, fixed, I knew something felt wrong... I still need my coffee :D... thanks :)
Felix Kling
@Felix you're welcome. I fell out of bed at 6 so I'm already two cups of coffee ahead :)
Gordon
+1  A: 

&= is the bitwise "And" assignment operator. It performs an "And" on the variable and stores the result. (more info here: http://www.php.net/manual/en/language.operators.bitwise.php and more general here: http://www.gamedev.net/reference/articles/article1563.asp). The

=&

operator is an assignment by reference, which makes th variable point not to the value of the other variable or constant, but rather to that memory location (more info here: http://www.php.net/manual/en/language.references.whatare.php)

sleepynate
+12  A: 

=& assigns by reference

$a = 1;
$b =& $a;
$a++;
echo $b; // 2

From PHP Manual on References:

References in PHP are a means to access the same variable content by different names.


&= is a bitwise AND assignment

$a = 1;
$a &= 1; // is the same as
$a = $a & 1;
echo $a; // 1

From Wikipedia on Bitwise AND:

A bitwise AND takes two binary representations of equal length and performs the logical AND operation on each pair of corresponding bits. In each pair, the result is 1 if the first bit is 1 AND the second bit is 1. Otherwise, the result is 0. For example:

    0101
AND 0011
  = 0001

EDIT: For a practical example on bitwise operations, see my answer to Bitwise Operations in PHP

Gordon
A: 

'&=' and '=&' are very different operators.

'&=' is a bitwise assignment operator:

$var = false;
$var &= foo(); // will call foo()
$var = false & foo(); // will call foo()
$var = $var && foo(); // will not call foo()

'=&' returns a reference:

$a = $b; //$a points to $b
$a =& $b; //$a does NOT point to $b... both point to the same thing.
Dolph