在php中,为什么空("0")返回true?

use*_*204 10 php string isset

根据php文档,以下表达式在调用时返回true empty($var)

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

我已经找到了如何通过使用,empty($var) && $var != 0但为什么PHP开发人员这样做"解决"问题?我认为这很荒谬,但是你有这个代码:

if (empty($_POST["X"])) {
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

我认为"0"不是空的,空的是什么时候什么都没有!也许最好使用它

if (isset($x) && x != "") {//for strings
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

use*_*740 10

empty 大致反映了 PHP选择的FALSE-y值:

转换为布尔值时,以下值被视为FALSE:

  • 布尔值FALSE本身
  • 整数0(零)
  • 浮点数0.0(零)
  • 空字符串,字符串"0"
  • 一个零元素的数组
  • ...

至于为什么 PHP以这种方式工作,或者为什么空函数也适用 - 好吧,那就是它的方式.

考虑使用strlen($x)(这特别适合于$_POST所有字符串值的源)来确定是否存在非空字符串,包括"0".

我使用的最终形式将是:isset($x) && strlen($x),应用任何额外的处理,知道有一些帖子数据.