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



我想知道下面两种情况有什么不同,推荐哪一种?

$val = 0;
if (!$val) {
  //True
}
if (empty($val) {
  //It's also True
}

看一下PHP类型比较表

如果您检查表,您会注意到在所有情况下,empty($x)!$x是相同的。所以它归结为处理未初始化的变量。!$x创建E_NOTICE,而empty($x)不创建。

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

让我们看看:

empty文档:

以下内容被认为是empty:

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

布尔值文档:

当转换为布尔值时,以下值被认为是FALSE:

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

似乎唯一的区别(关于结果值)是如何处理SimpleXML实例。其他所有内容似乎都给出了相同的结果(当然,如果您颠倒布尔类型转换)。

最新更新