php运算符优先级的这几道题你会么?

云原生侠
• 阅读 153

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运算符优先级的这几道题你会么?

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
梦
5年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Wesley13 Wesley13
4年前
thinkphp3.2.3模板渲染支持三元表达式
thinkphp3.2.3模板渲染支持三元表达式{$status?'正常':'错误'}{$info'status'?$info'msg':$info'error'}注意:三元运算符中暂时不支持点语法。如下:           <divclass"modalhidefade"id'myModa
Wesley13 Wesley13
4年前
PHP简写三目运算符实现二选一
PHP简写三目运算符实现二选一(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fblog.lmlphp.com%2Farchives%2F145%2FShorthand_TRINOCULAR_operators_in_PHP_to_realize_a_second_election_alt
Wesley13 Wesley13
4年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
4年前
Go之关系运算符、逻辑运算符、进制数、杂项
一:关系运算符,和php的一致,略。二:逻辑运算符,和已知的php一致,略。三:进制数,已在php中学习,略。四:Golang中不存在三元运算符。五:源码,反码,补码。对于有符号的而言:①:二进制的最高位是符号,0表示正数,1表示负数。②:正数的源码,反码,补码都一样。  1\补码:00000001,反码:0000
Wesley13 Wesley13
4年前
C++ 逗号运算符
1.逗号运算符的结果是,最后那个式子的结果2.逗号运算符是优先级最低的,比等号的运算符优先级还低1inta2;2intb3;3intca,b,ab;4//结果是c2;因为等号赋值运算符
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这