在PHP的 if 判断语句里面是赋值语句。我总结了下面几种情况
一、单个表达式
if ($a = 0) {
echo 'execute '; //未执行
}
var_dump($a);//输出:int(0)
if ($a = '') {
echo 'execute '; //未执行
}
var_dump($a);//输出:string(0) ""
if ($a = 1) {
echo 'execute ';//输出 execute
}
var_dump($a);//输出:int(1)
if ($a = 'vilay') {
echo 'execute';//输出:execute
}
var_dump($a); //输出:string(5) "vilay"
以上语句相当于先执行了赋值语句,再判断赋值表达式的结果。
二、带|| 的多个表达式
a.
if ($a = 0 || $b = 3) {
echo 'execute'; //输出:execute
}
var_dump($a);//输出:bool(true)
var_dump($b);//输出:int(3)
b.
if ($a = 1 || $b = 3) {
echo 'execute'; //输出:execute
}
var_dump($a);//输出:bool(true)
var_dump($b);//输出:int(3)
c.
if ($a = 0 || $b = 0) {
echo 'execute';
}
var_dump($a);//输出:bool(false)
var_dump($b);//输出:NULL
当||前面为true,后面表达式不执行(例b),当||前面为false,会继续验证后面的表达式(例a)
表达式执行:$a = 0 || $b = 3 等同于 $a = (0 || ($b = 3))
三、带&&的多个表达式
a.
if ($a = 0 && $b = 3) {
echo 'execute';
}
var_dump($a);//输出:bool(false)
var_dump($b);//输出:NULL
b.
if ($a = 1 && $b = 3) {
echo 'execute'; //输出:execute
}
var_dump($a);//输出:bool(true)
var_dump($b);//输出:int(3)
c.
if ($a = 0 && $b = 0) {
echo 'execute';
}
var_dump($a);//输出:bool(false)
var_dump($b);//输出:NULL
当&&前面为false,后面表达式不执行(例a),当&&前面为true,后面会继续验证后面的表达式(例b)
b)`