PHP:if(!$ val)VS if(empty($ val))。有什么区别吗?

时间:2011-08-22 00:11:02

标签: php null if-statement boolean

我想知道下面两个案例有什么不同,推荐哪一个?

$val = 0;

if (!$val) {
  //True
}

if (empty($val) {
  //It's also True
}

3 个答案:

答案 0 :(得分:25)

查看PHP type comparison table

如果您查看表格,您会发现,对于所有情况,empty($x)!$x相同。所以它归结为处理未初始化的变量。 !$x创建E_NOTICE,而empty($x)则不会。

答案 1 :(得分:4)

如果您使用空并且从未设置/创建变量,则不会抛出任何警告/错误。

答案 2 :(得分:4)

让我们看看:

empty documentation:

  

以下内容被视为empty

     
      
  • ""(空字符串)
  •   
  • 00为整数)
  •   
  • 0.00作为花车)
  •   
  • "0"0为字符串)
  •   
  • NULL
  •   
  • FALSE
  •   
  • array()(空数组)
  •   
  • var $var;(声明的变量,但类中没有值)
  •   

Booleans documentation

  

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

     
      
  • 布尔FALSE本身
  •   
  • 整数0(零)
  •   
  • 浮动0.0(零)
  •   
  • 空字符串和字符串"0"
  •   
  • 包含零元素的数组
  •   
  • 一个零成员变量的对象(仅限PHP 4)
  •   
  • 特殊类型NULL(包括未设置的变量)
  •   
  • SimpleXML从空标签创建的对象
  •   

似乎唯一的区别(关于结果值)是如何处理SimpleXML实例。其他所有东西似乎都给出了相同的结果(如果你反过来抛出了boolean强制转换)。