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