是否有任何理由说明if ($str == "")
和if (empty($str))
不会产生相同的输出?
答案 0 :(得分:4)
$str == ""
将为
$str = "";
$str = false;
$str = NULL;
$str = 0;
$str = 0.0;
$str == ""
将返回FALSE
$str = "0";
$str = array();
注意:对于未定义的变量,它也将返回TRUE,但它是一个警告。
另一方面empty($str)
对于上述所有情况(包括未定义的变量)都为TRUE,没有警告。
由于这种差异的原因,这是因为函数empty
旨在测试emtpy变量(任何类型,例如数组或数字*),而不仅仅是空字符串。< / p>
*:正如您现在可能对PHP存储在字符串中的数字感到满意,它只会根据需要转换值,例如echo "1" + 2
给出3
。这就是为什么empty($str)
在$str = "0"
时返回TRUE的原因,不是因为它是一个空字符串(它不是),而是因为它是一个空数字。
为了测试字符串是否为空,我强烈建议您使用$str === ''
或strlen($str) === 0
。
答案 1 :(得分:2)
$str = "0";
例如。请参阅this精细文档。
答案 2 :(得分:2)
$str == ""
对于所有empty($str)
都适用,但以下$ str的值除外:
"0"
(0为字符串)array()
(空数组)答案 3 :(得分:2)
是。如果$str
等于"0"
,则empty($str)
将返回TRUE
,而$str == ""
将返回FALSE
。
答案 4 :(得分:1)
empty
与== false
相同(不会针对不存在的变量引发错误)。如果您引用Type Comparison Tables,您会发现"0"
和array()
会有不同的比较。