PHP &&运算符

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

只是好奇为什么会引发警告。 注意:查询字符串参数“test”不包含在URL中

//Notice: Undefined index: test 
if($_GET['test'] === 'somestring' && !empty($_GET['test'])) {
}

//Valid - No Warning.  Why is this Valid? Param 'test' was never given
if(!empty($_GET['test']) && $_GET['test'] === 'somestring') {
}

这是因为PHP评估从左到右?而不是整个条件?

提问于
用户回答回答于
if(!empty($_GET['test']) && $_GET['test'] === 'somestring') {

因为您正在使用&&,如果有任何条件false,则不会检查其他条件。条件按照它们的写入顺序进行检查。从这里开始,第一个条件!empty($_GET['test'])false,下一个不评估因此没有警告。

用户回答回答于

简而言之,它归结为运算符优先级。 文档显示&&从左到右进行评估,这意味着首先评估子句的左侧部分。在您的情况下,该子句会导致警告。如果你颠倒你的子句顺序,empty()检查将返回false,然后逻辑将短路并停止评估。

扫码关注云+社区

领取腾讯云代金券