注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

简单说说PHP逻辑运算问题~~  

2010-12-11 22:35:00|  分类: Web技术-Php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

简单说说PHP逻辑运算问题

 今天在处理PHP逻辑运算时,遇到了此问题,如下:

 <?phpif($a=1&&$b=3){ var_dump($a,$b);}

我们一般认为此代码的运算顺序是:$a=(1&&$b)=3因为逻辑运算的优先级是高于“=”的,但实际却是 ($a=1)&&($b=3)。

后我在手册上找到这句话“Note: Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.”又从“Laruence“大牛的(PHP运算符优先级的一个例外)这篇文章里找到了答案,有兴趣的朋友可以去看看。但我们的问题,还没有说完,:-)~~

因为在,PHP里逻辑运算“与”和“或”有两种不同形式,它们的优先级也不同。

或运算: "||" 的优先级比 "or" 高
与运算:"&&" 的优先级比 "and" 高

另注:在JS里没有"or"与”and“这个逻辑表示形式

eg:(来至手册)

// "||" 的优先级比 "or" 高
$e = false || true; // $e 被赋值为 (false || true),结果为 true
$f = false or true; // $f 被赋值为 false [Altair注:"=" 的优先级比 "or" 高]
var_dump($e, $f); //bool(true)   bool(false)
// "&&" 的优先级比 "and" 高
$g = true && false; // $g 被赋值为 (true && false),结果为 false
$h = true and false; // $h 被赋值为 true [Altair注:"=" 的优先级比 "and" 高]

var_dump($g, $h);//bool(false)  bool(true)

 

也就是说:"||" 的优先级比 "=" 高,”=“的优先级比”or“高(|| > = > or)

                 "&&" 的优先级比 "="高,”=“的优先级比”and“高(&& > = > and)

 
但要注意的是:PHP并不完全遵守优先级的定义。如”$a=1&&$b=3“, "if (!$a = foo())"等

另注PHP运算符优先级表:




非结合clone newclonenew左[非结合++ --递增/递减运算符非结合~ - (int) (float) (string) (array) (object) (bool) @类型非结合instanceof类型右结合!逻辑操作符左* / %算术运算符左+ - .算术运算符字符串运算符左<< >>位运算符非结合< <= > >= <>比较运算符非结合== != === !==比较运算符左&位运算符引用左^位运算符左|位运算符左&&逻辑运算符左||逻辑运算符左? :三元运算符右= += -= *= /= .= %= &= |= ^= <<= >>= 赋值运算符左and逻辑运算符左xor逻辑运算符左or逻辑运算符左,多处用到
  评论这张
 
阅读(124)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017