我完全弄糊涂了。为什么在语法层面上,下面的两个陈述会有什么不同?
$bool1=false;
$bool2=true;
//Statement1
$result=$bool1 or $bool2; // Returns false
//Statement2
$result=($bool1 or $bool2); // Returns true
据我所知,这两种说法应该完全相同。但是,出于某种原因,他们不是。我可以解决这个问题,但它们不完全相同的事实意味着我错过了语言的某些方面,我不知道该去哪里检查。
这是由于优先级规则。or
的优先级低于=
,因此Statement1被解析为:
($result = $bool1) or $bool2;
要获得所需内容,请使用||
:
$result = $bool1 || $bool2;
赋值运算符(=
)的优先级高于或运算符(or
)
$result=$bool1 or $bool2;
首先执行$bool1到$result的赋值(给出FALSE),然后用$bool2执行or,这将导致FALSE
$result=($bool1 or $bool2);
括号强制首先执行$bool1 or $bool2
,这是TRUE;然后将该值分配给$result
只是为了显示差异,请尝试
$result=$bool1 || $bool2;
和
$result=($bool1 || $bool2);
因为or运算符(||
)的优先级高于赋值运算符(=
)
这是||
和or
之间差异显著的情况之一
语句实际上是相同的,并且评估相同的东西,也就是说,如果您打印整行(包括分配部分
$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是false,而bool1是true,因此在语句1中,您最终会得到$result or $bool2
,其计算结果为true
(但请注意($result
仍然是false)
在语句2中,您最终只得到$result
(并且$result
为true)。