逗号运算符PHP

时间:2013-12-21 23:56:03

标签: php boolean operators

这两种说法都是正确的:

$_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; 
}

他们之间有什么区别(如果有的话)?

4 个答案:

答案 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。

http://www.php.net/manual/en/function.isset.php

答案 3 :(得分:0)

没有区别,除了你在1中两次调用isset()这一事实,用&&有效地评估两个返回值。运算符,在2.你只是使用带有两个参数的isset()而不是一个,用逗号分隔。