一个帖子引发的思考(引用,条件判断,优先级)

来源:互联网 发布:吞吐量测试软件 编辑:程序博客网 时间:2024/05/29 07:50

原帖地址:http://topic.csdn.net/u/20101115/21/e09e8980-6179-4937-bb32-265b89f2c4f3.html

 

 

首先楼主的问题大家可以看一楼的回答和解释,很清楚了我觉得。

if(($a=3)>0||($b=$a)>0)这里面,把3赋值了给$a。而对于"||"逻辑运算符,只要前面的成立就不往后面执行了,所以没有把$a赋值给$b。

可是二楼的提出了另外一个问题,即把条件语句if(($a=3)>0||($b=$a)>0)改为if($a=3||$b=$a)。

和原来的输出结果一样么?

结果是不一样的。

为什么不一样,其实我也不是很懂,自己测试了一下,也找了好久:

首先是优先级的问题:按理说||的优先级高于=,即if($a=3||$b=$a)等价于if($a=(3||$b)=$a),但是实际的结果是||的优先级让=抢走了。具体原因大家参照这儿:http://www.laruence.com/2010/07/26/1668.html?cp=1#comments

然后就是我试了一下,if($a=3||$b=$a)和if(($a=3)||$b=$a)的结果也不一样,而且问题就出在这儿。

于是我在条件语句中加了一条语句:var_dump($a,$b)用于输出$a和$b的类型,结果是$a为布尔型,$b为int即整形。

看到这儿大家应该明白了,$a=3加上括号之后,把3赋值给了$a,进行了运算,即整体为真。不加括号的话,即也为真,但是没有运算,只是判断真假,所以$a的值回归到原始的0。(我的理解,我继续查找啊。)