我有这个if
语句,用于测试以下2个条件。第二个是函数goodToGo()
所以我想调用它,除非第一个条件已经为真
$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
}
}
答案 0 :(得分:76)
否 - 不会始终执行第二个条件(这会使您的示例等效)。
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());
答案 1 :(得分:6)
是。两个街区是一样的。与大多数(但不是全部)语言一样,PHP对&&
和||
使用短路评估。
答案 2 :(得分:3)
两个街区相同。
PHP逻辑运算符是“懒惰的”,只有在需要时才会对它们进行求值。 以下代码打印“Hello,world!”:
<?php
$a = 10;
isset($a) || die ("variable \$a does not exist.");
print "Hello, world!"
?>
其他逻辑运算符包括&amp;&amp;,和,或。
<?php
perform_action() or die ('failed to perform the action');
?>
是一种流行的习语。
答案 3 :(得分:2)
仅当第一个条件为真时才会检查第二个条件,因此两个语句都是等价的。
答案 4 :(得分:1)
是的,您提供的2个代码块是等效的。 PHP有短路,所以当你使用时 ||和&amp;&amp;,在第一个之后的任何陈述只在必要时进行评估。
答案 5 :(得分:0)
总是用你自己的语言来处理你的技术语言,同样在这里,如果我在口头交谈中说你,就像:你问=“我是否饿了”&amp;&amp;'我正在吃披萨“类似于”如果我饿了那么我只吃披萨“? 所以在这里你可以看到后来的短语说,直到我不饿,我不吃披萨,而前者说我很吵,我正在吃披萨。 : - )