<?php
//片段一
$a=3;
$b=3;
if($a++ || $b++){ //$b++被短路
}
echo "$a,$b<br>"; //4,3
$type = gettype($a);
echo $type.'<br>'; //integer
//片段二
$a = 3;
$b = 3;
if($a=5 || $b++){ //逻辑运算符优先级比赋值运算符优先级要高,(5 || $b++)首先进行了逻辑运算,同时$b++被短路。结果赋值给$a。
}
echo "$a,$b<br>"; //1,3
$type = gettype($a);
echo $type.'<br>'; //boolean
//片段三
$a = 3;
$b = 3;
if($a=(false || $b=5)){ //同上一个片段比较,显式的使用了括号,再次证明片段二的结论。
}
echo "$a,$b<br>"; //1,5
$type = gettype($a);
echo $type.'<br>'; //boolean
//片段四
$a = 3;
$b = 3;
if(($a=5) || ($b=5)){ //($b=5)被短路,因为($a=5)已经被判断为真。
}
echo "$a,$b<br>"; //5,3
$type = gettype($a);
echo $type.'<br>'; //integer
//片段五
$a=3;
$b=3;
if($a++ | $b++){ //| 为按位或,是位运算符,和 || 逻辑运算符是不同的。表达式判断的是按位或后的真假。
}
echo "$a,$b<br>"; //4,4
$type = gettype($a);
echo $type.'<br>'; //integer
//片段六
$a = 3;
$b = 3;
if($a==5 || $b==5){ //比较运算符的优先级要比逻辑运算符的优先级高
}
echo "$a,$b<br>"; //3,3
$type = gettype($a);
echo $type.'<br>'; //integer
//片段七
$a = 3;
$b = 3;
if($a=5 | $b=6){ //又一按位或的例子。
}
echo "$a,$b<br>"; //7,6
$type = gettype($a);
echo $type.'<br>'; //integer
//片段八
$a = 3;
$b = 3;
if($a=5 || $b=5){ //和片段二、片段三同理。
}
echo "$a,$b<br>"; //1,3
$type = gettype($a);
echo $type.'<br>'; //boolean
?>
关于逻辑运算符、赋值运算符、位运算符的优先级,还有短路问题。
最新推荐文章于 2023-04-15 14:58:20 发布