0

我完全糊涂了。为什么在语法层面上,下面的两个陈述会有什么不同?

$bool1=false;
$bool2=true;

//Statement1
$result=$bool1 or $bool2;  // Returns false

//Statement2
$result=($bool1 or $bool2);  // Returns true

据我所知,这两个陈述应该是完全一致的。但是,出于某种原因,它们不是。我可以解决这个问题,但它们不相同的事实意味着我错过了语言的某些方面,而且我不知道在哪里检查。

4

3 回答 3

3

这是由于优先规则。or的优先级低于=,因此 Statement1 被解析为:

($result = $bool1) or $bool2;

要获得您想要的,请||改用:

$result = $bool1 || $bool2;
于 2013-02-08T22:02:12.137 回答
2

赋值运算符 ( =) 的优先级高于 or 运算符 ( or)

$result=$bool1 or $bool2;

首先执行 $bool1 到 $result 的赋值(给出 FALSE),然后执行 or 与 $bool2,结果为 FALSE

$result=($bool1 or $bool2);

括号强制$bool1 or $bool2首先执行,这是一个TRUE;然后将该值分配给 $result

只是为了显示差异,请尝试

$result=$bool1 || $bool2;

$result=($bool1 || $bool2);

因为 or 运算符 ( ||) 的优先级高于赋值运算符 ( =)

这是||和之间的差异or显着的情况之一

于 2013-02-08T22:02:00.420 回答
1

这些语句实际上是相同的并且评估相同的东西,也就是说,如果您打印整行(包括赋值部分

$bool1=false;
$bool2=true;

//Statement1
var_dump($result=$bool1 or $bool2);  // Returns true

//Statement2
var_dump($result=($bool1 or $bool2));  // Returns true

区别在于任务。在语句 1 中,它被读作,($result = $bool1) or $bool2而语句 2 被读作$result = ($bool1 or $bool2)

由于 bool1 为假且 bool1 为真,因此在语句 1 中,您最终得到$result or $bool2which 的计算结果为true(但请注意 ($result仍然为假)

在陈述 2 中,你最终得到了 just $result(并且$result是真的)。

于 2013-02-08T22:04:09.027 回答