> 总是得到评估后的情况

2022-08-30 10:44:35

我有这个声明,测试以下2个条件。第二个是函数,所以我想调用它,除非第一个条件已经为真ifgoodToGo()

$value = 2239;

if ($value < 2000 && goodToGo($value)){
   //do stuff
}

function goodToGo($value){
   $ret = //some processing of the value
   return $ret; 
}

我的问题是关于2 if条件。他们是都得到评估,还是第二个只有在第一个为真时才被评估?$value < 2000&&goodToGo($value)

换句话说,以下2个区块是相同的吗?

if($value < 2000 && goodToGo($value)) {
   //stuff to do
}

if($value < 2000) {
    if (goodToGo($value)){
       //stuff to do
    }
}

答案 1

否 - 第二个条件不会始终执行(这使得您的示例等效)。

PHP 的 、 、 和 运算符被实现为“短路”运算符。一旦发现强制结果为整体条件的条件,则停止对后续条件的评估。&&||andor

http://www.php.net/manual/en/language.operators.logical.php

// --------------------
// foo() will never get called as those operators are short-circuit

$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());

答案 2

是的。这两个块是相同的。PHP 与大多数(但不是全部)语言一样,对 和 使用短路评估&&||


推荐