最近在一项目中遇到个小问题,却耗费笔者大量时间精力,脑细胞死伤无数,只怪自己基础打得不够扎实...
PHP代码
copycode- if($a = func() && $b>0) //语句1
-
- if($a = func() and $b>0) //语句2
|
我们都知道&&和and都是逻辑与的意思,以上代码从表面看上去似乎是一个样.笔者最初也没发现其中差异,困惑不已
但后来goolge之后,终于发现其中玄机.
两者的优先级不同,以上代码中“&&”的优先级最高“=”的优先级居中,而“and”最低。
语句1和语句2的执行步骤分别是
PHP代码
copycode- //语句1执行顺序
- func() && $b>0
- $a = func() && $b>0
- //语句2执行顺序
- $a = func()
- $b>0
- $a = func() and $b>0
|
看明白了吧,由此小问题引发的大麻烦可见基础是多么的重要.有空多看看基础点的知识.当然如果你实在记不住那么多优先级关系,也没关系,我们都知道()的优先级是最高的就够了.在以后的运算中尽量使用()将运算分隔开,就不会造成今天这种问题.也不用去管那么多的优先级了.比如可将语句改为如下:
PHP代码
copycode- if(($a = func()) && ($b>0))
- 这样子就显而易见了,不是么?
|