1.$a = 10;$b = 20;
$c = $a++ + ++$b;
if($a=0||$b=0&&$c=0||$d=2&&$e=5){
$a++;
$b++;
$c++;
$d++;
$e++;
}
var_dump($a);//false
var_dump($b);//false
var_dump($c);//1
var_dump($d);//1
var_dump($e);//1
?>
$c = $a++ + ++$b;
echo $c;
首先$a++,这个表达式会先把$a输出,然后在计算,++$a则正好相反,先计算后输出,所以以上的$c = 10+21=31;
2.
$a=1;$b=1;$c=1;$d=1;$e=1;
if($a=1&&$b=3&&$c=4&&$d=2&&$e=5){
$a++;
$b++;
$c++;
$d++;
$e++;
}
var_dump($a);//true
var_dump($b);//true
var_dump($c);//true
var_dump($d);//true
var_dump($e);//6
见到这种题,很多人第一眼会直接把$a=1看成是$a==1,这两个是不一样的,一个是赋值,一个是判断是否相等
本题为赋值,如果if里面只有一个赋值if($a=1)则直接把1赋值给a,肯定为真,执行a加加,但是如果有多个表达式,一旦出现一个赋值为0,前面的变量都自动转为bool型,因为有个赋值为0,所以前面的变量都变为false,后面不再执行,如果全为真,则全部变为true,本题没有赋值为0,所以a,b,c,d都变为真,但是最后一个e最终赋值给5;
若题变为
$a=1;$b=1;$c=1;$d=1;$e=1;
if($a=1&&$b=0&&$c=0||$d=2&&$e=5){
$a++;
$b++;
$c++;
$d++;
$e++;
}
结果:boolean false
boolean false
int 1
int 1
int 1
例:$a=1;$b=1;$c=1;$d=1;$e=1;
if($a=0||$b=0&&$c=0||$d=2&&$e=5){
$a++;
$b++;
$c++;
$d++;
$e++;
}
var_dump($a);//false
var_dump($b);//false
var_dump($c);//1
var_dump($d);//1
var_dump($e);//1
?>
//$a=0转为为false,因为是 || 连接,还往下走,$b=0,也为假,用&&连接,程序不往下走;