2010-07-05 76 views
19

找到答案是比我想象的要困难得多。由于我不知道你会怎么称呼它,因此很难运行Google搜索,因为它会忽略这些字符。'&='和'=&'运算符是做什么的?

我试过浏览PHP Assignment Operators页面,甚至是其他操作员页面,但没有发现任何内容告诉我他们是干什么的。我不只是想根据我使用它的单个函数来猜测。那么'& ='和'= &'运营商究竟做了什么?

所有我知道的是它设置了一个变量,这将是'='部分,所以我真的需要知道'&'部分正在做什么。

请不要说明显;我需要有人来解释他们到底做了些什么。我知道其中之一是'按位',但这对我来说并不意味着什么。

+0

它们是完全不同的运营商为答案反映。 – 2010-07-05 05:33:00

+0

我有同样的问题试图自己看这个。文档可以更好地组织,但您基本上必须查看_Bitwise Operator_页面和_What References Do_页面。另外,我认为通过引用进行赋值通常是'$ a =&$ b',但我猜''''和'&'之间的空格是可选的。 http://www.php.net/manual/en/language.references.whatdo.php – 2010-07-05 05:45:19

+2

我更喜欢使用'$ a =&$ b'。它更清晰,因为'&'不属于等号,但实际上是变量。它与'a - > 0'类似于'去'操作符,实际上它是'a-> 0'。 http://stackoverflow.com/q/1642028/985454 这么多的娱乐。 – Qwerty 2014-05-30 08:36:51

回答

35

=&assigns by reference

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

从PHP手册上的引用:

引用在PHP是访问不同的名称相同的变量内容的手段。


&=bitwise AND分配

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

Wikipedia on Bitwise AND:

的逐位AND需要两个相等长度的二进制表示,并执行每对对应的逻辑AND运算位。在每一对中,其结果是1,如果第一位是1并且第二位是1,否则结果为0。例如:

0101 
AND 0011 
    = 0001 

编辑:对于一个实际的按位操作示例,请参阅我的回答Bitwise Operations in PHP

+2

我更喜欢使用'$ a =&$ b'。它更清晰,因为'&'不属于等号,但实际上是变量。它与'a - > 0'类似于'去'操作符,实际上它是'a-> 0'。 http://stackoverflow.com/q/1642028/985454 – Qwerty 2014-05-30 08:35:23

10

=&assigning by reference

它通过引用而不是按值分配变量。

实施例:

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

$b = 'bar'; 

echo $a; 

打印bar因为$b具有$a并因此改变$b基准也改变的$a值。


&=bitwise AND

实施例:

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

然后$a &= $b只是简称$a = $a & $b和装置:取每个位,并执行AND operation,那就是:

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

因此

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

=> $a = 0 // bit representation 0 ;) 
+1

你的AND是一个OR – Gordon 2010-07-05 05:37:15

+2

@戈登:Uups,固定,我知道有什么感觉错了...我仍然需要我的咖啡:D ...谢谢:) – 2010-07-05 05:37:50

+0

不客气。我在6点起床,所以我已经提前喝了两杯咖啡:) – Gordon 2010-07-05 06:05:12

2
&= 

是按位“AND”赋值运算符。它对变量执行“AND”并存储结果。 (更多的信息在Bitwise Operators和更多的一般信息是在Bitwise Operations in C)。

=& 

操作者是通过引用的分配,这使得可变点不连接到其他变量或常数的值,而是该内存位置(详细信息是在What References Are) 。

1

'& ='和'= &'是非常不同的操作符。

'& =' 是按位赋值运算符:

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

'= &' 返回的引用:

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