关于逻辑运算符&&;在php中


About logical operator && in php

这是代码

$a = 2;
$a && $a = 1;
var_dump( $a ); // result 1

为什么$a是1?

根据该文件,逻辑运算符'&'具有比赋值运算符更高的优先级,则应将其解释为($a&&$a(=1,然后应该存在语法错误。

来自文档

注意:
尽管=的优先级低于大多数其他运算符,但PHP仍然允许类似以下的表达式:if (!$a = foo()),在这种情况下,foo()的返回值被放入$a中。

文档中没有具体说明在这一点上要遵循什么规则,但我们可以推断出您的代码等效于以下内容:

$a && ($a = 1)

因为&&是"懒惰的",因为如果它发现一个错误的参数,它就不会麻烦评估进一步的参数,这意味着$a只有在它之前持有truthy值的情况下才会被设置为1(在您的情况下,2是truthy(。如果您设置了$a = 0,那么它将保持为0

按照它的编写方式,你说的与这个相同

$a = 2;
if($a) $a = 1;

由于2东西,因此它成功并将$a更改为1。

那么它为什么要这样做呢?您有一个声明$a = 2;这里没有操作顺序,所以PHP处理它。操作顺序确实会在第二条语句中生效。记住,$a是某种东西,(即真理(。让我们稍微更改一下你的代码

$a = 0;
$a && $a = 1;
echo $a;

正如您所看到的,$a现在是伪造的。因此,该命令阻止脚本更改值,并且脚本输出0

$a && $a = 1;

是布尔类型的表达式。由于$a是真的,因此表达式的求值将继续到第二部分,即赋值。作为分配的副作用,$a现在保持1

如果$a在开始时为0,那么它在结束时将保持0,因为表达式的求值将在测试第一个条件后立即终止。