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

hen*_*r1x 1 php

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

$result = true;
if ($result == "discontinued"){
   echo "IN";
} 
if ($result == "invalid"){
   echo "IN2";
}
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*nde 6

使用comparison(==)运算符时,任何无法转换为false的值都将计算为true.这包括任何非空字符串.这是因为PHP中类型杂耍.所以 "discontinued"计算结果为true,因为它不是空字符串.如果使用相同的operator(===)类型转换未完成,"discontinued"则处理文字字符串,然后您的语句将评估为false.

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

  • ""(空字符串)
  • 0(0为整数)
  • 0.0(0作为浮点数)
  • "0"(0作为字符串)
  • 空值
  • array()(一个空数组)
  • 是$ var; (声明的变量,但没有值)