前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于php运算符优先级的几道题

关于php运算符优先级的几道题

作者头像
wangxl
发布2018-03-08 12:13:10
9820
发布2018-03-08 12:13:10
举报
文章被收录于专栏:PHP在线

今天正好群里有人在问一道php运算符优先级的问题,正好以前也遇到过类似的问题,这里整理一下吧,方便大家理解 以防掉坑:)

先来道简单的:

$a = 3; if ($a = 5) { $a++; } var_dump($a);// (int)6

这里掉坑的同学会认为是3. 注意=号是赋值 == 比较运算符 所以一个好的编码习惯 对于数字来说 最好把它放前面写成 5 == $a 这样即使你写成了 5 = $a 此时会报错 不会是隐式的赋值 来,我们接着看下一个坑. $x = 2; echo $x == 2 ? '我' : $x == 1 ? '你' : '它'; //你 掉坑里的同学可能认为结果是我, 因为$x确实等于2 根据三元运算符的规则 ?前为true就输出我了. 这里的知识点在于运算符优先级以及三元运算符左结合的特性,其实真正的执行流程是这样的: $x = 2;//将2赋值给变量x 没啥说的 echo $x == 2 ? '我' : $x == 1 ? '你' : '它'; //你 //因为 == 的优先级比三元运算符高 所以转换成如下代码 #echo true ? '我' : false ? '你' : '它'; //由于三元运算符左结合的特性 所以如上代码等效于 #echo (true ? '我' : false) ? '你' : '它'; //先计算左边括号里的 #echo '我' ? '你' : '它'; //到这里大家应该明白了吧 嗯,继续围观坑 $a = 3; $b = 5; if ($a = 3 || $b = 7) { $a++; $b++; } var_dump($a);//(bool)true var_dump($b);//(int)6 这题相信不少同学在做面试题的时候应该会遇到过,我第一次做的时候也被坑了。 被坑的同学相信答案大概有这么几种(4,6),(2,6) $b基本没啥争议,关键是$a到底是神马情况,来我们来讲解一下这个坑。 #赋值 没啥说的 $a = 3; $b = 5; if ($a = 3 || $b = 7) { $a++; $b++; } //知识点1: ||的优先级比=高 //所以$a = 3 || $b = 7 等效于 $a = (3 || $b = 7) //因为3 || $b = 7整个表达式为真 所以返回true 赋值给$a 此时$a = true, 将执行括号里的内容 //知识点2: 递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是1 //也就意味着$a依然是true,不会是1++之后的2 $b依然++ //所以结果是$a是true,$b是自增之后的6 更多大坑,等待收集..也欢迎大家提供~~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档