gpt4 book ai didi

php - if($val) vs. if($val != "") vs. if(!empty($val)) —— 哪个?

转载 作者:可可西里 更新时间:2023-10-31 23:02:47 26 4
gpt4 key购买 nike

我看到很多人使用各种不同的方法来检查变量是否为空,似乎真的没有达成共识。我听说 if($foo)if(!empty($foo))if($foo != "")这是真的吗?

我知道这是一个非常简单的问题,但我真的很想知道。有什么不同吗?我应该使用哪种方法?

最佳答案

裸测试和空字符串比较的区别

if($foo != "") 等同于 if($foo) 大部分时间,但不总是

要查看差异在哪里,请考虑 comparison operator behavior连同 conversion to string rules对于第一种情况,conversion to boolean rules对于第二种情况。

我发现的是:

  • if $foo === array()if($foo != "") 测试将成功(数组是“大于”字符串),但是 if($foo) 测试将失败(空数组转换为 bool 值 false)
  • if $foo === "0"(字符串),if($foo != "") 测试将再次成功(显然),但是if($foo) 测试将失败(字符串 "0" 转换为 bool 值 false)
  • 如果 $foo 是一个从空标签创建的 SimpleXML 对象,if($foo != "") 测试将再次成功(对象“大于"字符串),但是 if($foo) 测试将失败(此类对象转换为 bool 值 false)

See the differences in action .

更好的测试方式

首选的测试方法if(!empty($foo)),它与上面的完全相同:

  1. 它不会遭受 if($foo != "") 的不一致(恕我直言,这简直太可怕了)。
  2. 如果 $foo 不在当前范围内,它不会生成 E_NOTICE,这是它优于 if($foo) .

但这里有一个警告:如果 $foo === '0'(长度为 1 的字符串),则 empty($foo) 将返回 true,这通常是(但不一定总是)您想要的。不过 if($foo) 也是这种情况。

有时您需要使用相同的运算符进行测试

最后,当您要测试特定类型的值时,必须对上述情况进行异常(exception)处理。例如,strpos 可能返回 0,也可能返回 false。这两个值都将无法通过 if(strpos(...)) 测试,但它们具有完全不同的含义。在这些情况下,使用 identical operator 进行测试按顺序排列:if(strpos() === false)

关于php - if($val) vs. if($val != "") vs. if(!empty($val)) —— 哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7384913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com