关于逻辑运算符&&在PHP中

时间:2014-06-14 13:27:16

标签: php

这是代码

$a = 2;
$a && $a = 1;

var_dump( $a ); // result 1

为什么$ a是1?

根据该文件,逻辑运营商'&&&优先级高于赋值运算符,它应解释为($ a&& $ a)= 1,然后应该有语法错误。

3 个答案:

答案 0 :(得分:5)

来自documentation

  

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

文档没有说明此时遵循的规则,但我们可以推断出您的代码与此相同:

$a && ($a = 1)

因为&&是"懒惰"因为如果它发现了一个错误的话,它就不会对进一步的论点进行评估,这意味着$a如果以前只有1,那么它将被设置为2。你的情况,$a = 0是真实的。如果您已设置0,那么它将保留{{1}}。

答案 1 :(得分:2)

它写的方式,你说的是与此相同的东西

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

由于2 某事,它会成功并将$a更改为1.

那么为什么会这样呢?你有$a = 2的陈述;这里没有操作顺序,所以PHP处理它。操作顺序将在第二个声明中生效。请记住,$a是SOMETHING,(即真实的)。我们稍微改变你的代码

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

如你所见,$a现在是假的。因此,顺序会阻止脚本更改值,脚本输出0

答案 2 :(得分:0)

$a && $a = 1;

是布尔类型的表达式。由于$a是真实的,表达式的评估继续到第二部分,即赋值。作为作业的副作用,$a现在保留1

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