本页主题: 实例讲解PHP中and和&&的区别 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

phpma

该用户目前不在线
级别: 管理员
精华: 6
发帖: 266
威望: 278 点
金钱: 2780 RMB
贡献值: 0 点
注册时间:2007-05-17
最后登录:2008-11-28

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

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

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


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

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

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

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

PHP代码
Copy code
//语句1执行顺序   
func() && $b>0   
$a = func() && $b>0   
//语句2执行顺序   
$a = func()   
$b>0   
$a = func() and $b>0
 

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

PHP代码
Copy code
if(($a = func()) && ($b>0))

这样子就显而易见了,不是么?


顶端 Posted: 2008-08-09 01:32 | [楼 主]
开源嘛论坛 » php技术讨论

Guest cache page, Update at 2008-12-02 06:20 桂ICP备07006725号
Powered by PHPWind v6.0 Certificate Code © 2003-07 PHPWind.com Corporation