我想知道下面两个案例有什么不同,推荐哪一个?
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It's also True
}
答案 0 :(得分:25)
如果您查看表格,您会发现,对于所有情况,empty($x)
与!$x
相同。所以它归结为处理未初始化的变量。 !$x
创建E_NOTICE
,而empty($x)
则不会。
答案 1 :(得分:4)
如果您使用空并且从未设置/创建变量,则不会抛出任何警告/错误。
答案 2 :(得分:4)
让我们看看:
以下内容被视为
empty
:
""
(空字符串)0
(0
为整数)0.0
(0
作为花车)"0"
(0
为字符串)NULL
FALSE
array()
(空数组)var $var;
(声明的变量,但类中没有值)
转换为布尔值时,以下值被视为
FALSE
:
- 布尔
FALSE
本身- 整数
0
(零)- 浮动
0.0
(零)- 空字符串和字符串
"0"
- 包含零元素的数组
- 一个零成员变量的对象(仅限PHP 4)
- 特殊类型
NULL
(包括未设置的变量)SimpleXML
从空标签创建的对象
似乎唯一的区别(关于结果值)是如何处理SimpleXML
实例。其他所有东西似乎都给出了相同的结果(如果你反过来抛出了boolean强制转换)。