只是好奇为什么这会触发警告。
注意: URL中未包含查询字符串参数test
//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的计算是从左到右吗?而不是整个病症?
发布于 2018-06-12 05:07:17
if(!empty($_GET['test']) && $_GET['test'] === 'somestring') {
因为您使用的是&&
,所以如果任何条件为false
,则不会检查进一步的条件。条件是按照编写的顺序进行检查的。因为在这里,第一个条件!empty($_GET['test'])
是false
,所以下一个条件不求值,因此没有警告。
发布于 2018-06-12 05:06:19
在第一个示例中:
//Notice: Undefined index: test
if($_GET['test'] === 'somestring' && !empty($_GET['test'])) {
}
您尝试先访问变量的值,然后再检查它是否存在,这基本上就是第二个示例所做的事情。在检查到它不存在后,它退出条件,而不测试第二部分。
发布于 2018-06-12 05:09:28
简单地说,这可以归结为operator precedence。
文档显示&&
是从左到右计算的,这意味着首先计算子句的左侧部分。在您的示例中,该子句将导致一个警告。如果颠倒了子句顺序,empty()
检查将返回false,然后逻辑将执行short circuit并停止求值。
https://stackoverflow.com/questions/50805984
复制相似问题