有关php运算符优先级的练习题,php运算符优先级的这几道题你会么?

bbbc7206899f383d9649df81e7711ee9.png

fe4e36c1d77ec618d9df084fce0875a7.png

先来道简单的:

$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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值