if $ str =“”和if($ str)之间有区别吗?

时间:2012-09-30 05:40:45

标签: php comparison

是否有任何理由说明if ($str == "")if (empty($str))不会产生相同的输出?

5 个答案:

答案 0 :(得分:4)

$str == ""将为

返回TRUE
  • $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

请参阅手册页:http://www.php.net/manual/en/function.empty.php

答案 4 :(得分:1)

empty== false相同(不会针对不存在的变量引发错误)。如果您引用Type Comparison Tables,您会发现"0"array()会有不同的比较。