zoukankan      html  css  js  c++  java
  • PHP | 运算符优先级

    运算符的优先级,通常来说,最好还是通过括号来明确表明运算顺序,不应该依靠运算符的优先级和结合性来决定,通常能增加代码的可读性

    示例题目1
    $a = $b = 0;
    if ($a=3 || $b=3) {
        $a++;
        $b++;
    }
    echo $a . PHP_EOL . $b;		//可以打出你们的答案
    
    示例题目2
    $a = $b = 0;
    if ($a=3 && $b=3) {
        $a++;
        $b++;
    }
    echo $a . PHP_EOL . $b;		//可以打出你们的答案
    

    运算优先级

    1. 如从手册截图而来,优先级顺序,从最高到最低,即or最低,如果是相同的优先级别,那么就按照的它们的结合方向.level.jpg

    2. 示例演示

      1. 同一级别的结合方向

        $a = 1;
        $b = 2;
        $a = $b+= 3;			//结合方向是右边,所以这里 运算的顺序处理一下就是$a=($b = $b + 3)
        echo $a . PHP_EOL .$b;		//echo 5,5
        
        
      2. 不同级别的

        # 1. 2种运算符
        $a = $b = 1;
        if ($a = 3 || $b = 3) {
             $a++;
             $b++;
        }
        echo $a . PHP_EOL . $b;
        
        # 因为优先级 || 要高于 = 所以就变成如下的样子
        if ($a = (3 || $b = 3)) {
            
        }
        # 同时要进行类型转换,和||的特性,当一个为true时,就不在进行判断,所以3为真的时候,$b=3其实是没有执行的,也就是$a = true;
        # 在对$a进行自增时,true++,还是true
        # $b++ 是 2
        # 所以输出 1,2
        
        # 2. 3种运算符
        if($a=5 && $a==5){
          echo '5';
        } else {
          echo 'not 5';
        }
        //echo not 5
        # 分析 if 中的3中运算符,优先级由高到底是 ==,&&,=,由此上述表达式可变为
        if ($a = (5 && ($a==5))) {}
        # 如果php错误级别开的比较高 如E_ALL,这里将会输出 $a 未定义
        
        # 第四种
        $bool = true && false;
        var_dump($bool);  //false, 这里结合上面的案例分析出来应该是没问题
        
        $bool = true and false;
        var_dump($bool); // true, 这里输出true的原因是 = 的优先级高于 and,所以其实 and操作的结果对$bool并没有任何影响,纯粹就是var_dump(true)
        
    总结

    这么多优先级和结合性,记住几乎不可能,也没必要全记住,在开发的过程中,记住使用括号明确掉优先级是最好的.

    想生活,不想谋生
  • 相关阅读:
    单链队列
    栈的顺序存储表示
    顺序队列
    串的定长顺序存储表示
    串的堆分配存储
    双向循环链表
    单循环链表的表示和实现
    串的块链存储表示
    线性表的顺序表示和实现
    线性表的单链表表示和实现
  • 原文地址:https://www.cnblogs.com/Daneil/p/14396350.html
Copyright © 2011-2022 走看看