1

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

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

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

4

1 回答 1

6

使用比较 ( ==) 运算符时,任何无法转换为 false 的内容都将评估为 true。这包括任何非空字符串。这是因为PHP 中的类型杂耍。所以 "discontinued"评估为真,因为它不是一个空字符串。如果您使用相同的运算符 ( ===) 类型转换,则不进行此类转换,"discontinued"则将其视为文字字符串,然后您的语句将评估为 false。

当执行类型杂耍时,以下将评估为 false。其他一切都将被评估为真:

  • ""(一个空字符串)
  • 0(0 为整数)
  • 0.0(0 作为浮点数)
  • "0" (0 作为字符串)
  • 空值
  • 错误的
  • array() (一个空数组)
  • $var; (声明的变量,但没有值)
于 2013-10-23T20:48:06.920 回答