这两种说法都是正确的:
$_POST['foo'] = $_POST['bar'] = 'some string';
//1. with '&&' operator
if(isset($_POST['foo']) && isset($_POST['bar'])) {
echo true;
}
//2. with a comma
if(isset($_POST['foo'], $_POST['bar'])) {
echo true;
}
他们之间有什么区别(如果有的话)?
答案 0 :(得分:5)
在实践中存在差异。含义应该相同,但“逗号运算符”版本在这种情况下实现“完全布尔评估”。也就是说,如果没有设置第一个变量,php将不会查看第二个变量,因为它们位于&&关系和结果不再是真实的。 (这称为“短路”eval)在第二种情况下,php必须在调用isset(...)之前计算两个参数,以便检查这两个值。
这只是原则,是的,但有时它非常重要,例如,如果操作数是函数调用。
答案 1 :(得分:3)
根据PHP文档没有区别:isset() function。实际上,isset
可以采用无穷大的参数,如果传递的每个变量都存在,则返回true。如果每个变量的每个isset()都为真,则类似于test。
理论应该检查,但是该函数只接受变量,如doc所述:
isset()仅适用于变量,因为传递任何其他内容都会导致解析错误。要检查是否设置了常量,请使用defined()函数。
......所以参数计算的优先级没有问题。
最后,请注意这里的逗号不是运算符。这里的逗号用于分隔isset
函数的参数。之前的解释不适用于empty()
,例如the empty
function only takes 1 argument。
TL; DR :isset($a, $b) == isset($a) && isset($b)
,但empty($a, $b)
是语法错误。
答案 2 :(得分:0)
isset()
函数可以接受多个参数。如果提供了多个参数,则只有在设置了所有时才返回true。
答案 3 :(得分:0)
没有区别,除了你在1中两次调用isset()这一事实,用&&有效地评估两个返回值。运算符,在2.你只是使用带有两个参数的isset()而不是一个,用逗号分隔。