首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP &&运算符

PHP &&运算符
EN

Stack Overflow用户
提问于 2018-06-12 05:03:27
回答 3查看 65关注 0票数 0

只是好奇为什么这会触发警告。

注意: URL中未包含查询字符串参数test

代码语言:javascript
复制
//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的计算是从左到右吗?而不是整个病症?

EN

回答 3

Stack Overflow用户

发布于 2018-06-12 05:07:17

代码语言:javascript
复制
if(!empty($_GET['test']) && $_GET['test'] === 'somestring') {

因为您使用的是&&,所以如果任何条件为false,则不会检查进一步的条件。条件是按照编写的顺序进行检查的。因为在这里,第一个条件!empty($_GET['test'])false,所以下一个条件不求值,因此没有警告。

票数 2
EN

Stack Overflow用户

发布于 2018-06-12 05:06:19

在第一个示例中:

代码语言:javascript
复制
//Notice: Undefined index: test 
    if($_GET['test'] === 'somestring' && !empty($_GET['test'])) {
}

您尝试先访问变量的值,然后再检查它是否存在,这基本上就是第二个示例所做的事情。在检查到它不存在后,它退出条件,而不测试第二部分。

票数 1
EN

Stack Overflow用户

发布于 2018-06-12 05:09:28

简单地说,这可以归结为operator precedence

文档显示&&是从左到右计算的,这意味着首先计算子句的左侧部分。在您的示例中,该子句将导致一个警告。如果颠倒了子句顺序,empty()检查将返回false,然后逻辑将执行short circuit并停止求值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50805984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档