这让我发疯了几个小时。
我有一个函数返回以下三个值之一:
function checkValid() {
...
return array("expired",$oldDate,$newDate) ;
return array(true,$oldDate,$newDate) ;
return array(false,$oldDate,$newDate) ;
}
list($isValid,$oDate,$nDate) = checkValid() ;
if ($isValid == "expired") {
...
...do blah
}
每当条件返回true
时,if ($isValid == "expired") { ... }
就会触发。所以我做了一些测试,果然:
$isValid = true ;
if ($isValid == "expired") {
echo "Yup...some how 'expired' equals TRUE" ;
} else {
echo "Nope....it doesn't equal true" ;
}
output: Yup...some how 'expired' equals TRUE
当我将if/condition更改为:时
$isValid = true ;
if ($isValid === "expired") {
echo "Yup...some how 'expired' equals TRUE" ;
} else {
echo "Nope....it doesn't equal true" ;
}
output: Nope....it doesn't equal true
我对此感到困惑。为什么true == 'expired'
或1 == 'expired'
???
当使用两个等号==
时,php会在引擎盖下键入coersion,并检查truthy大小写,其中包括除0
之外的所有数字、布尔true
、除空字符串之外的所有字符串以及其他一些大小写。
如果你想检查是否完全匹配,你应该使用三个等号===