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

时间:2014-08-03 01:50:44

标签: php string isset

根据php文档,调用empty($var)

时,以下表达式返回true
  • "" (空字符串)
  • 0(0为整数)
  • 0.0(0作为浮动)
  • " 0" (0作为字符串)
  • NULL
  • FALSE
  • array()(空数组)
  • $变种; (声明的变量,但没有值)

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

if (empty($_POST["X"])) {
    doSomething();
}

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

if (isset($x) && x != "") {//for strings
    doSomething();
}

1 个答案:

答案 0 :(得分:7)

empty 大致镜像 PHP's selection of FALSE-y values

  

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

     
      
  • 布尔值FALSE本身
  •   
  • 整数0(零)
  •   
  • 浮点数0.0(零)
  •   
  • 空字符串,字符串“0”
  •   
  • 包含零元素的数组
  •   
  • ...
  •   

至于为什么 PHP以这种方式工作,或为什么空函数也是如此 - 好吧,那就是它的方式。

考虑使用strlen($x)(这特别适合$_POST这些都是字符串值的来源)来确定是否存在非空字符串,包括“0”。

我使用的最终表单是:isset($x) && strlen($x),并且知道有一些帖子数据后应用了任何其他处理。