zoukankan      html  css  js  c++  java
  • 一些收藏:运算符的优先级

    今天看到几个题目比较有意思 分享一下。真的没有看出来自己哪里错了 但是一个没答对

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

    先来道简单的:

    $a = 3;

    if ($a = 5) {
        $a++;
    }
    var_dump($a);// (int)6
    所以一个好的编码习惯 对于数字来说 最好把它放前面写成 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

    这里掉坑的同学会认为是3. 注意=号是赋值 == 比较运算符

  • 相关阅读:
    前端代码规范
    AD 对联
    leaflet 入门笔记
    在Mac OS X上安装Git
    在Mac上开启C的新征程
    Python编程基础
    GitHub的使用(Git Shell)
    《网页设计心理学》Susan M.Weinschenk 小结精粹
    【问题】做图片验证码时乱码了,在header前加上ob_clean()就能神奇的显示?!
    --allow-file-access-from-files 命令的使用
  • 原文地址:https://www.cnblogs.com/jasonyou/p/6537132.html
Copyright © 2011-2022 走看看