Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php '&=';和'=&';运营商怎么办?_Php_Variables_Operators - Fatal编程技术网

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.