我想知道下面两种情况有什么不同,推荐哪一种?
$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
实例。其他所有内容似乎都给出了相同的结果(当然,如果您颠倒布尔类型转换)。