提问人:rolinger 提问时间:3/26/2022 更新时间:3/26/2022 访问量:27
php 为什么 TRUE == “过期”?
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'
答:
1赞
Pooya Estakhri
3/26/2022
#1
当使用两个等号时,php 会在引擎盖下键入 coersion 并检查真实情况,其中包括除 、boolean 之外的所有数字、除空字符串以外的所有字符串和其他一些情况。==
0
true
如果要检查完全匹配,则应使用三个等号===
评论
0赞
rolinger
3/26/2022
我确实通过使用...但我不明白为什么甚至仍然被认为是真实的。仍然对此感到困惑......尤其是与JS相比,这不会发生(我不认为)===
true == 'expired'
0赞
Pooya Estakhri
3/26/2022
它确实发生在js中,并且解决方案是完全相同的,当两端的类型不同时,php检查的是类型转换。因此,您的字符串要么变为 false,要么变为 true。
0赞
Pooya Estakhri
3/26/2022
如果字符串为空或像“0”一样为 0,我猜可能还有其他几种情况,那么它的计算结果为 false,否则为 true
0赞
rolinger
3/26/2022
type casting
- 我会继续阅读。我刚刚在 JS 中测试了它,它没有评估为真实/真实。 不将 HERE 输出到控制台。var a = true; if (a == "expired") { console.log("HERE") ; }
1赞
rolinger
3/26/2022
@PooyaEstkhri - 我想也许我对 JS truthy 的理解使我与我期望的 PHP truthy 混淆了。这简直太丑陋了。哈哈
评论
true
"expired"