运算符的优先级,通常来说,最好还是通过括号来明确表明运算顺序,不应该依靠运算符的优先级和结合性来决定,通常能增加代码的可读性
示例题目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; //可以打出你们的答案
运算优先级
-
如从手册截图而来,优先级顺序,从最高到最低,即or最低,如果是相同的优先级别,那么就按照的它们的结合方向.
-
示例演示
-
同一级别的结合方向
$a = 1; $b = 2; $a = $b+= 3; //结合方向是右边,所以这里 运算的顺序处理一下就是$a=($b = $b + 3) echo $a . PHP_EOL .$b; //echo 5,5
-
不同级别的
# 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)
-
总结
这么多优先级和结合性,记住几乎不可能,也没必要全记住,在开发的过程中,记住使用括号明确掉优先级是最好的.