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

roc*_*row 1 php comparison boolean

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

$var = true;
if($var == 'X'){
  echo 'pass';
}
Run Code Online (Sandbox Code Playgroud)

上面的代码会触发"通过"......为什么?如果我使用$var === 'x'它将表现得像预期的那样.

谢谢.

Mic*_*ski 5

非空字符串将始终评估为TRUE参见有关布尔评估的PHP文档.正如您所发现的,您必须使用===严格类型比较来测试字符串'X'是否与布尔值相同TRUE.

'X' == TRUE  // TRUE
'' == TRUE   // FALSE
'X' === TRUE // FALSE
Run Code Online (Sandbox Code Playgroud)

  • 这不是(完全)原因.例如,在JavaScript中,非空字符串也计算为"true",但是`true =='X'`是"false".这取决于转换的类型.通常,评估和类型转换之间存在差异.现在,我不知道PHP的比较算法在哪里定义,但结果在第二个[比较表](http://php.net/manual/en/types.comparisons.php)中描述. (2认同)