关于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 更多大坑,等待收集..也欢迎大家提供~~

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2016-03-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

163. [USACO Mat07] 牛语

☆   输入文件:latin.in   输出文件:latin.out   简单对比 时间限制:1 s   内存限制:128 MB 译: zqzas 奶牛们...

2377
来自专栏追不上乌龟的兔子

[多少懂点位运算]找出唯一的数字

大家都知道现代计算机的底层是以二进制为基础的,计算机所有的操作最后都归结到了简单的二进制位运算上:与,或,非和异或。

1785
来自专栏HTML5学堂

JavaScript | 动画显示比例的投票效果

HTML5学堂(码匠):一个简洁实用的投票效果如何使用原生JS来进行实现呢?同时动画显示比例的形式又需要依靠哪些技术来实现?是数学对象还是字符串操作,又或者是计...

3076
来自专栏程序员叨叨叨

5.5 类型转换

Cg 中的类型转换和 C 语言中的类型转换很类似。C 语言中类型转换可以是强制类型转换,也可以是隐式转换,如果是后者,则数据类型从低精度向高精度转换。在 Cg ...

702
来自专栏云飞学编程

冒死偷发python爬虫班的vip课程,爬取头条小姐姐街拍图片

612
来自专栏带你撸出一手好代码

从PHP代码的细节说起

因为一个BUG, 我在一个摇摇欲坠,几乎碰一下就会散架的项目中某一个角落中发现下面这样一段代码 ? 这段程序与那个BUG有密切的关系。 我来回反复的捉摸这段代码...

3497
来自专栏吴裕超

HTML link标签media参数

写html这么久了,今天才发现link标签还有个media参数,赶紧把它补回来,虽然现在没有用到,但是不能不知道它 定义和用法 media 属性规定被链接文档将...

3178
来自专栏玄魂工作室

CTF实战30 CTF题目练习和讲解五(讲解部分)

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

603
来自专栏哲学驱动设计

EntityFramework 元数据 设计分析

    由于之前已经尝试使用过 EF CodeFirst CTP4,所以这次在EF4.1发布的第三天,在 OEA 框架中已经支持使用它来实现数据访问层。而且,我...

1768
来自专栏用户2442861的专栏

CSS float浮动的深入研究、详解及拓展(二)

by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wo...

330

扫描关注云+社区