Php '&=';和'=&';运营商怎么办?
找到这个问题的答案比我想象的要困难得多。因为我不知道你怎么称呼它,所以很难运行谷歌搜索,因为它会忽略这些字符 我试着浏览这个页面,甚至是其他运营商的页面,但没有发现任何确切的信息告诉我他们在做什么。我不想仅仅根据使用它的单个函数来猜测。那么“&=”和“=&”操作符到底做什么呢 我所知道的是它设置了一个变量,这将是'='部分,所以我真的需要知道'&'部分在做什么 请不要说明显的;我需要有人确切地解释他们做什么。我知道其中一个是“按位”,但这对我来说没有任何意义。Php '&=';和'=&';运营商怎么办?,php,variables,operators,Php,Variables,Operators,找到这个问题的答案比我想象的要困难得多。因为我不知道你怎么称呼它,所以很难运行谷歌搜索,因为它会忽略这些字符 我试着浏览这个页面,甚至是其他运营商的页面,但没有发现任何确切的信息告诉我他们在做什么。我不想仅仅根据使用它的单个函数来猜测。那么“&=”和“=&”操作符到底做什么呢 我所知道的是它设置了一个变量,这将是'='部分,所以我真的需要知道'&'部分在做什么 请不要说明显的;我需要有人确切地解释他们做什么。我知道其中一个是“按位”,但这对我来说没有任何意义。=&是 它不是通过值而是通过引用来分
=&
是
它不是通过值而是通过引用来分配变量
例如:
$a = 'foo';
$b =& $a;
$b = 'bar';
echo $a;
$a = 4 // binary representation: 100
$b = 1 // binary representation: 001
打印bar
,因为$b
引用了$a
,因此更改$b
也会更改$a
的值
&=
是
例如:
$a = 'foo';
$b =& $a;
$b = 'bar';
echo $a;
$a = 4 // binary representation: 100
$b = 1 // binary representation: 001
然后,$a&=$b
就是$a=$a&$b
的缩写,意思是:取每一位,执行以下操作:
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 ;)
是按位“AND”赋值运算符。它对变量执行“AND”并存储结果。(更多信息在中,更多一般信息在中)
运算符是一种引用赋值,它使变量不指向其他变量或常量的值,而是指向该内存位置(详细信息在中)。=&
参考PHP手册:
PHP中的引用是通过不同名称访问相同变量内容的一种方法
&=
是一个赋值
$a = 1;
$a &= 1; // is the same as
$a = $a & 1;
echo $a; // 1
从
按位AND采用两种长度相等的二进制表示,并对每对对应位执行逻辑AND运算。在每对中,如果第一位为1,第二位为1,则结果为1。否则,结果为0。例如:
编辑:有关按位运算的实际示例,请参阅我对'&='和'=&'是非常不同的运算符的回答 “&=”是按位赋值运算符:
$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.
正如答案所反映的,它们是完全不同的运算符。我自己在查找时也遇到了同样的问题。文档可以更好地组织,但您基本上必须查看按位运算符页面和引用所做的事情页面。另外,我认为通过引用赋值通常是写
$a=&b
,但是我想=
和&
之间的空格是可选的。我更喜欢使用$a=&$b
。这更清楚,因为&
不属于等号,而是变量。它类似于a-->0
“goes to”操作符,实际上是a-->0
。我更喜欢使用$a=&$b
。这更清楚,因为&
不属于等号,而是变量。它类似于a-->0
“goes to”操作符,实际上是a-->0
@Gordon Food for Through=思想食粮:=&
不是组合运算符。请阅读并考虑调整你的答案。请阅读这个发帖,并考虑调整你的答案:
$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.