phpma
级别: 管理员
UID: 1
精华: 6
发帖: 270
威望: 318 点
金钱: 2820 RMB
贡献值: 0 点
注册时间:2007-05-17
最后登录:2009-01-10
楼主  发表于: 2008-08-09 01:32

 实例讲解PHP中and和&&的区别

最近在一项目中遇到个小问题,却耗费笔者大量时间精力,脑细胞死伤无数,只怪自己基础打得不够扎实...

PHP代码
copycode
  1. if($a = func() && $b>0) //语句1
  2.  
  3. if($a = func() and $b>0) //语句2 


我们都知道&&和and都是逻辑与的意思,以上代码从表面看上去似乎是一个样.笔者最初也没发现其中差异,困惑不已

但后来goolge之后,终于发现其中玄机.

两者的优先级不同,以上代码中“&&”的优先级最高“=”的优先级居中,而“and”最低。

语句1和语句2的执行步骤分别是

PHP代码
copycode
  1. //语句1执行顺序   
  2. func() && $b>0   
  3. $a = func() && $b>0   
  4. //语句2执行顺序   
  5. $a = func()   
  6. $b>0   
  7. $a = func() and $b>0
 

看明白了吧,由此小问题引发的大麻烦可见基础是多么的重要.有空多看看基础点的知识.当然如果你实在记不住那么多优先级关系,也没关系,我们都知道()的优先级是最高的就够了.在以后的运算中尽量使用()将运算分隔开,就不会造成今天这种问题.也不用去管那么多的优先级了.比如可将语句改为如下:

PHP代码
copycode
  1. if(($a = func()) && ($b>0))
  2. 这样子就显而易见了,不是么?