zoukankan      html  css  js  c++  java
  • PHP运算符考察点

    PHP运算符优先级

    运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号(*)的优先级比加号(+)高。必要时可以用括号来强制改变优先级。例如:(1 + 5) * 3 的值为 18

    如果运算符优先级相同,那运算符的结合方向决定了该如何运算。例如,"-"是左联的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 并且结果是 -4. 另外一方面,"="是右联的,所以 $a = $b = $c 等同于 $a = ($b = $c)。

    没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的。但另外一方面表达式 1 <= 1 == 1 是合法的, 因为 == 的优先级低于 <=

    下表是php手册所给的运算符优先级:

    PHP运算优先级(php.net)

    总结常用的运算符优先级如下:

    递增/递减 > ! > 算术运算符 > 大小比较 > (不)相等比较 > 引用 > 位运算符(^) > 位运算符(|) > 逻辑与 > 逻辑或 > 三目 > 赋值 > and > xor > or

    比较运算符

    == 和 ===的区别:

    ==:比较值是否相等;
    ===:比较值与类型是否都相等;

    注意false的七种情况,都是等值的

    递增/递减运算符

    • 递增/递减运算符不影响布尔值
      ture++ 还是 ture,false++也还是false
    • 递减NULL没有效果
    • 递增NULL值为1
    • 递增/递减在前就先运算再返回,在后就先返回再运算
      ++$a:先执行递增再返回递增后的值;
      $a++:先返回值再执行递增;

    逻辑运算符

    • 短路作用
      $a = true || $b == 3;// || 后面的表达式被短路,不会执行
      $a = false && $b == 3;// && 后面的表达式被短路,不会执行
    • ||、&& 和 or、and 的优先级是不一样的
      $a = false || true; //"||"优先级大于"=",$a 的值是 true
      $a = false or true; // "or"优先级小于"=",$a 的值是 false

    解题方法

    重点记忆递增/递减运算符的运算规则,逻辑运算符的短路效果,在看到逻辑运算符时要多考虑优先级的问题。

    真题

    <?php
    $a = 0;
    $b = 0;
    
    if ($a = 3 > 0 || $b = 3 > 0) {
        $a++;
        $b++;
        echo $a . "\n";
        echo $b . "\n";
    }
    

    思路:

    /**
     * if里面有 = > || 三个运算符,根据运算符优先级, ">" > "||" > "=" 
     * 所以首先执行的是 3 > 0 ,然后执行 || ,3>0 为true,则|| 后面被短路 ,不被执行
     * 所以$a = true ,$b = 0
     * 进入if之后,$a++ ,$a还是true,$b++ ,$b = 1
     * 因此最后的结果是 1 1(echo true,打印的是1)
     */
    
  • 相关阅读:
    linux 内核升级4.19
    监管对保险页面的要求
    软件测试-测试可交付成果
    软件测试架构思想
    dockerfile
    转载:.NET Core 图片操作在 Linux/Docker 下的坑
    docker build速度过慢问题
    .net 5 发布到 docker 或 docker 镜像方法
    Centos 安装 docker 教程
    DQL、DML、DDL、DCL全名是啥?
  • 原文地址:https://www.cnblogs.com/clannadxr/p/7692992.html
Copyright © 2011-2022 走看看