如果第一个参数在带有和的条件下为真,则将运行下一次操作


If first argument falls true in a condition with and operators will the next run?

假设我有一段代码,看起来像这样:

if( !isset($this->domainID) && !$this->getDomainID() ){
    return false;
}

如果第一个语句为真,第二个语句会运行吗?因为性能方面,从数据库中获取ID是愚蠢的,如果我已经得到了它,还有很多其他情况同样适用。如果没有,我就得把它们嵌套起来,对吧?

我不知道在这些情况下编程语言的工作方式是否有一个标准,或者在其他语言中是否不同,然后是php。我试着在谷歌上搜索,但我真的不知道在这种情况下该搜索什么。正如你所看到的,我在标题中很难描述它

是。如果第一个为真,则计算第二个。相反,如果第一个为假,第二个将不会被求值。这可能是进行微优化的好地方,正如您所提到的,这是逻辑进展。

根据注释,对于OR条件,反过来是正确的。因此,如果第一个表达式为假,则计算下一个表达式,如果第一个表达式为真,则计算下一个表达式。

不,如果第一个为假,第二个将不被计算。

你在这里真正说的是"惰性求值"。它经常用于函数式编程语言,可以极大地改善运行时。更多信息请看这里:http://en.wikipedia.org/wiki/Lazy_evaluation

PHP不使用延迟求值,但在这样的条件下,如果结果已经清楚,它至少会在第二个参数之前停止。

答案是肯定的,你可以自己看,这样做:

#!/usr/bin/php                                                                  
<?PHP
function test1() {
    echo "inside test1'n";
    return false;
}
function test2() {
    echo "inside test2'n";
    return true;
}
echo "test1 first AND test2 second'n";
if (test1() && test2()) {
    echo "both passed'n";
}
echo "test2 first AND test1 second'n";
if (test2() && test1()) {
    echo "both passed'n";
}
echo "test1 first OR test2 second'n";
if (test1() || test2()) {
    echo "one passed'n";
}
echo "test2 first OR test1 second'n";
if (test2() || test1()) {
    echo "one passed'n";
}
?>

是的,您正在使用AND,因此如果第一个条件为真,将检查两个条件(但如果第一个条件为假则不检查)。

如果第一个条件为真,php将不计算第二个条件