php 为什么 TRUE == "expired"?

php why does 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 会在引擎盖下进行类型转换并检查真实情况,其中包括 0、布尔值 true 以外的所有数字,除空字符串和其他一些情况外的所有字符串。

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