PHP:将字符串与true进行比较会返回奇怪的结果

时间:2013-10-23 20:46:36

标签: php

如果有人可以向我解释为什么以下代码,我将不胜感激......

$result = true;
if ($result == "discontinued"){
   echo "IN";
} 
if ($result == "invalid"){
   echo "IN2";
}

触发两个回声(即ININ2)....我知道我可以将操作符更改为===并且它将起作用但我不明白发生了什么。感谢

1 个答案:

答案 0 :(得分:6)

使用比较(==)运算符时,任何无法转换为false的值都将计算为true。这包括任何非空字符串。这是因为type juggling in PHP。所以"discontinued"的计算结果为true,因为它不是空字符串。如果您使用相同的运算符(===)类型转换未执行,那么"discontinued"将被视为文字字符串,然后您的语句将评估为false。

执行类型杂耍时,以下内容将评估为false。其他所有内容都将被评估为真:

  • “”(空字符串)
  • 0(0为整数)
  • 0.0(0作为浮动)
  • “0”(0作为字符串)
  • NULL
  • FALSE
  • array()(空数组)
  • $变种; (声明的变量,但没有值)