2010-07-05 75 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.