page contents

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

以下内容希望帮助到大家!

attachments-2020-07-jiC9AFHX5f2381816a098.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


attachments-2020-07-yZnlkFYh5f237edcbe923.jpg

  • 发表于 2020-07-31 10:24
  • 阅读 ( 1197 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章