PHP的布尔比较处理 - 解释?

时间:2011-11-03 19:29:52

标签: php comparison boolean

我遇到了引起我兴趣的事情,我只是想知道如何解释它为什么会发生。

$var = true;
if($var == 'X'){
  echo 'pass';
}

上面的代码会触发“通过”......为什么?如果我使用$var === 'x',它将按预期运行。

感谢。

2 个答案:

答案 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?);