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
以外的所有数字,除空字符串和其他一些情况外的所有字符串。
如果要检查是否完全匹配,应使用三个等号===
这让我抓狂了几个小时。
我有一个返回以下三个值之一的函数:
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
以外的所有数字,除空字符串和其他一些情况外的所有字符串。
如果要检查是否完全匹配,应使用三个等号===