是&&和总是得到评估 [英] does the condition after && always get evaluated
问题描述
我有 if
语句,用于测试以下2个条件。第二个是函数 goodToGo()
所以我想调用它,除非第一个条件已经为真
I have this if
statement that tests for the 2 conditions below. The second one is a function goodToGo()
so I want to call it unless the first condition is already true
$value = 2239;
if ($value < 2000 && goodToGo($value)){
//do stuff
}
function goodToGo($value){
$ret = //some processing of the value
return $ret;
}
我的问题是2如果条件 $ value < 2000
&&
goodToGo($ value)
。他们都得到评估,还是第二个只在第一个真实时被评估?
My question is about the 2 if conditions $value < 2000
&&
goodToGo($value)
. Do they both get evaluated or does the second one only get evaluated when the first one is true?
换句话说,以下2个区块是否相同?
In other words, are the following 2 blocks the same?
if($value < 2000 && goodToGo($value)) {
//stuff to do
}
if($value < 2000) {
if (goodToGo($value)){
//stuff to do
}
}
推荐答案
否 - 第二个条件不会一直执行(这使你的例子等效)。
No--the second condition won't always be executed (which makes your examples equivalent).
PHP的&&
, ||
,和
,或
运算符实现为short - 电路运营商。一旦发现条件强制整个条件的结果,后续条件的评估就会停止。
PHP's &&
, ||
, and
, and or
operators are implemented as "short-circuit" operators. As soon as a condition is found that forces the result for the overall conditional, evaluation of subsequent conditions stops.
来自 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());
这篇关于是&&和总是得到评估的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!