为什么比较和empty()在PHP中的行为如此?

Fra*_*rth 3 php syntax

PHP:

$a = "0";
$b = "00";
var_dump(empty($a)); # True (wtf?)
var_dump($a == $b); # True... WTF???
var_dump(empty($b)); # False WWWTTTFFFF!!??
Run Code Online (Sandbox Code Playgroud)

我已经阅读了文档.但是文档没有解释为什么他们这样设计它.我不是在寻找变通方法(我已经知道了),我正在寻找解释.

为什么会这样?这会让某些事情变得更容易吗?

cle*_*tus 9

至于"0" == "00"解析true,答案在于比较运算符:

如果将整数与字符串进行比较,则字符串将转换为数字.如果比较两个数字字符串,则将它们作为整数进行比较.这些规则也适用于switch语句.

(重点补充)

这两个"0""00"是数字字符串,以便执行数值比较,显然0 == 0.

===如果你不想要任何隐式类型转换,我建议使用.

至于empty():

以下内容被认为是空的:

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