&&总是得到评估后的条件

bre*_*ett 44 php conditional if-statement

我有这个if声明,测试下面的两个条件.第二个是函数,goodToGo()所以我想调用它,除非第一个条件已经为真

$value = 2239;

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

function goodToGo($value){
   $ret = //some processing of the value
   return $ret; 
}
Run Code Online (Sandbox Code Playgroud)

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

换句话说,以下2个块是否相同?

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

if($value < 2000) {
    if (goodToGo($value)){
       //stuff to do
    }
}
Run Code Online (Sandbox Code Playgroud)

sbl*_*lom 82

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

PHP的&&,||,and,和or运营商实现"短路"操作符.一旦发现条件强制整个条件的结果,后续条件的评估就会停止.

来自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());
Run Code Online (Sandbox Code Playgroud)

  • @brett,是的-关键是对于OR,您知道第一次找到TRUE时它将为TRUE-不会有任何FALSE会改变它。对于AND,您知道第一次找到FALSE时将为FALSE-不会有任何TRUE会改变这一点。 (2认同)

Ste*_*non 6

是.两个街区是一样的.PHP,最喜欢的(但不是全部)语言,使用短路计算&&||.


Min*_*ang 5

这两个块是相同的。

PHP 逻辑运算符是“懒惰的”,仅在需要时才对它们进行评估。以下代码打印“Hello, world!”:

<?php
$a = 10;
isset($a) || die ("variable \$a does not exist.");
print "Hello, world!"
?>
Run Code Online (Sandbox Code Playgroud)

其他逻辑运算符包括&&、和、或。

<?php
perform_action() or die ('failed to perform the action');
?>
Run Code Online (Sandbox Code Playgroud)

是一个流行的成语。