关于php运算符优先级问题

$b=5;
if(0 || $b=7){}
按理说||的优先级比=高,所以应该是先执行0 || $b然后执行1=7啊。但是事证明它是先执行了$b=7然后才执行0||7的。谁能给小弟解释一下吗?
现在可以确定||的优先级比=高,不信的可以百度一下。
if($a=1||$b=7){}会先执行(1||$b=7)然后会把bool值1赋值给$a.
现在的疑问是||既然比第一个=号的优先级高为什么会没有第二个=的优先级高?

  下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
  运算符优先级

  结合方向
  运算符
  附加信息

  无 clone new clone 和 new
  左 [ array()
  右 ++ -- ~ (int) (float) (string) (array) (object) (bool) @ 类型和递增/递减
  无 instanceof 类型
  右 ! 逻辑运算符
  左 * / % 算术运算符
  左 + - . 算术运算符和字符串运算符
  左 << >> 位运算符
  无 == != === !== <> 比较运算符
  左 & 位运算符和引用
  左 ^ 位运算符
  左 | 位运算符
  左 && 逻辑运算符
  左 || 逻辑运算符
  左 ? : 三元运算符
  右 = += -= *= /= .= %= &= |= ^= <<= >>= => 赋值运算符
  左 and 逻辑运算符
  左 xor 逻辑运算符
  左 or 逻辑运算符
  左 , 多处用到
  对具有相同优先级的运算符,左结合方向意味着将从左向右求值,右结合方向则反之。对于无结合方向具有相同优先级的运算符,该运算符有可能无法与其自身结合。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-13
|| 是或者的意思 ,符号两边有一个成立就是true if(0 || $b=7){} 先判断0 ,0是false,在判断$b=7;
如果想实现前边 是false 的后边不执行 可以用&&符号 if(0 && $b=7){} &&符号是 两边都成立才会返回true 所以当第一个是 false的时候后边的就不在验证了。也就不会执行到 $b=7.
第2个回答  2012-10-13
PHP并不完全遵守优先级的定义, 这个在PHP的手册中也有说明:
Note: 尽管 = 比其它大多数的运算符的优先级低,PHP 仍旧允许类似如下的表达式:if (!$a = foo()),在此例中 foo() 的返回值被赋给了 $a。


所以 对表达式中有歧义的加括号本回答被提问者采纳
第3个回答  2012-10-13
运算符 先乘除 后加减 跟数学真心一样的。。。
你上面写得是逻辑运算符,你可以百度搜索下PHP逻辑运算符的优先等级本回答被网友采纳
第4个回答  2012-10-13
||的优先级低吧。。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网