在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)`