php 为什么 TRUE == "expired" ?



这让我发疯了几个小时。

我有一个函数返回以下三个值之一:

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、除空字符串之外的所有字符串以及其他一些大小写。

如果你想检查是否完全匹配,你应该使用三个等号===

相关内容

  • 没有找到相关文章

最新更新