逗号运算符PHP

Edw*_*ard 4 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; 
}
Run Code Online (Sandbox Code Playgroud)

它们之间有什么区别(如果有)?

dke*_*ner 6

在实践中有区别。含义应该相同,但是在这种情况下,“逗号运算符”版本将实现“完整布尔值评估”。也就是说,如果未设置第一个变量,则php将不会查看第二个变量,因为它们处于&&关系中,结果将不再正确。(这被称为“短路”评估)在第二种情况下,php必须在调用isset(...)之前计算两个参数,以便同时检查两个值。

是的,这只是原理,但是有时很重要,例如,如果操作数是函数调用。

(对评论者的简短回答是“ isset不会接受函数调用”-这与isset无关,它通常与实现表达式有关。一旦结果显而易见,就停止计算,并尽可能多地保留部分结果函数参数会做相反的事情:它们都在传递给子例程之前已计算完毕。)

  • 但是`isset(...)`不接受函数作为操作数,因此您的原理无效。 (2认同)