【问题标题】:What do the '&=' and '=&' operators do?'&=' 和 '=&' 运算符是做什么的?
【发布时间】:2010-07-05 05:19:23
【问题描述】:

事实证明,要找到这个问题的答案比我想象的要困难得多。因为我不知道你会怎么称呼它,所以很难运行 Google 搜索,因为它会忽略这些字符。

我尝试浏览PHP Assignment Operators 页面,甚至是其他运营商页面,但没有找到任何可以告诉我他们具体做什么的信息。我不只是想根据我使用它的单个功能进行猜测。那么 '&=' 和 '=&' 运算符到底是做什么的呢?

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

请不要说显而易见的;我需要有人准确解释他们的工作。我知道其中一个是“按位”,但这对我来说没有任何意义。

【问题讨论】:

  • 正如答案所反映的,它们是完全不同的运营商。
  • 我自己也遇到了同样的问题。文档可以更好地组织,但您基本上必须查看 Bitwise Operator 页面和 What References Do 页面。另外,我认为通过引用分配通常写成$a = &$b,但我猜=& 之间的空格是可选的。 php.net/manual/en/language.references.whatdo.php
  • 我更喜欢使用$a = &$b。更清楚了,因为& 不属于等号,实际上属于变量。它类似于a --> 0“转到”运算符,实际上是a-- > 0stackoverflow.com/q/1642028/985454 太混乱了。

标签: php variables operators


【解决方案1】:

=&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:

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

    0101
AND 0011
  = 0001

编辑:有关按位运算的实际示例,请参阅我对Bitwise Operations in PHP的回答

【讨论】:

【解决方案2】:

=&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 ;)

【讨论】:

【解决方案3】:
&=

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

=&

操作符是一个引用赋值,它使变量不指向其他变量或常量的值,而是指向那个内存位置(更多信息在What References Are)。

【讨论】:

【解决方案4】:

'&=' 和 '=&' 是非常不同的运算符。

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

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

【讨论】:

猜你喜欢
  • 2014-09-16
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 2016-02-14
相关资源
最近更新 更多