用PHP进行布尔比较处理-解释?

用PHP进行布尔比较处理-解释?,php,comparison,boolean,Php,Comparison,Boolean,我遇到了一些让我感兴趣的事情,我只想知道如何解释它为什么会发生 $var = true; if($var == 'X'){ echo 'pass'; } 上述代码将触发“pass”。。。为什么?如果我使用$var=='x'它将按预期运行 谢谢。非空字符串将始终计算为TRUE请参阅。正如您所发现的,必须使用==进行严格的类型比较,以测试字符串'X'是否与布尔值TRUE相同 'X' == TRUE // TRUE '' == TRUE // FALSE 'X' === TRUE // F

我遇到了一些让我感兴趣的事情,我只想知道如何解释它为什么会发生

$var = true;
if($var == 'X'){
  echo 'pass';
}
上述代码将触发“pass”。。。为什么?如果我使用
$var=='x'
它将按预期运行


谢谢。

非空字符串将始终计算为
TRUE
请参阅。正如您所发现的,必须使用
==
进行严格的类型比较,以测试字符串
'X'
是否与布尔值
TRUE
相同

'X' == TRUE  // TRUE
'' == TRUE   // FALSE
'X' === TRUE // FALSE

非空字符串的计算结果总是
TRUE
请参阅。正如您所发现的,必须使用
==
进行严格的类型比较,以测试字符串
'X'
是否与布尔值
TRUE
相同

'X' == TRUE  // TRUE
'' == TRUE   // FALSE
'X' === TRUE // FALSE

PHP的类型转换可能有它的优点,但在我看来,它会导致“危险的”误解。其他不直观的例子包括:

'abc' == 0;
0 == null;
'' == null;
1 == '1y?z'

由于各种原因,这些在PHP中都被认为是正确的。我总是建议您编写自己的函数来检查是否相等,这是您所期望的(或者您是否想到了整个PHP?)

PHP的类型转换可能有它的优点,但在我看来,它会导致“危险的”误解。其他不直观的例子包括:

'abc' == 0;
0 == null;
'' == null;
1 == '1y?z'

由于各种原因,这些在PHP中都被认为是正确的。我总是建议您编写自己的函数来检查是否相等,这是您所期望的(或者您是否想到了整个PHP?)

+1,松散类型语言的众多陷阱之一@rocksfrow,如果您想同时检查类型,请使用
==
。这非常有意义>谢谢!这不是(完全的)原因。例如,在JavaScript中,非空字符串的计算结果也为
true
,但
true==“X”
false
。这取决于发生的类型转换。一般来说,求值和类型转换之间存在差异。现在,我不知道PHP的比较算法是在哪里定义的,但是结果在第二部分中描述了。这只是一个例子,说明只有当某个东西的计算结果为
true
,它才不必是
true
。但也许我只是让事情变得更复杂;)在PHP中,当与布尔值进行比较时,字符串很可能被转换为布尔值,在这种情况下,求值值和类型转换值之间没有区别。。。我想这可能值得一提。继续我之前的评论,事实确实如此。这里定义了比较:+1,它是松散类型语言的众多陷阱之一@rocksfrow,如果您想同时检查类型,请使用
==
。这非常有意义>谢谢!这不是(完全的)原因。例如,在JavaScript中,非空字符串的计算结果也为
true
,但
true==“X”
false
。这取决于发生的类型转换。一般来说,求值和类型转换之间存在差异。现在,我不知道PHP的比较算法是在哪里定义的,但是结果在第二部分中描述了。这只是一个例子,说明只有当某个东西的计算结果为
true
,它才不必是
true
。但也许我只是让事情变得更复杂;)在PHP中,当与布尔值进行比较时,字符串很可能被转换为布尔值,在这种情况下,求值值和类型转换值之间没有区别。。。我想这可能值得一提。继续我之前的评论,事实确实如此。这里定义了比较:这实际上很好地表明
true=='abc'
'abc'==0
但是
true!=0
…这实际上很好地表明
true=='abc'
'abc'==0
但是
true!=0
。。。