我遇到了引起我兴趣的事情,我只是想知道如何解释它为什么会发生。
$var = true;
if($var == 'X'){
echo 'pass';
}
上面的代码会触发“通过”......为什么?如果我使用$var === 'x'
,它将按预期运行。
感谢。
答案 0 :(得分:5)
非空字符串将始终评估为TRUE
请参阅PHP's documentation on boolean evaluation。如您所发现,必须使用===
进行严格类型比较,以测试字符串'X'
是否与布尔TRUE
相同。
'X' == TRUE // TRUE
'' == TRUE // FALSE
'X' === TRUE // FALSE
答案 1 :(得分:1)
PHP的类型杂耍可能有它的优点,但在我看来它会导致“危险”的误解。其他非直观的例子是:
'abc' == 0;
0 == null;
'' == null;
1 == '1y?z'
由于各种原因,这些在PHP中都被认为是真的。我总是建议编写自己的函数来检查是否相同,这可以按照您的预期工作(或者您是否考虑了整个PHP type comparison matrix?);