4

私はこれが単純な質問でなければならないことを知っていますが、PHPではこのようなステートメントでそれを知っています

if ($a && $b) { do something }

$ aがfalseの場合、PHPは$bもチェックしません

ORについても同じことが言えます。

if ($a || $b) { do something }

$ aが真の場合でも、$ bをチェックしますか?

これは初歩的なものだと知っていますが、どこにも答えが見つかりません...ありがとう

4

5 に答える 5

9

論理式の評価は、結果がわかるとすぐに停止されます。

論理演算子

于 2011-07-22T10:58:44.493 に答える
8

マニュアルの「論理演算子」ページの例1を参照してください。

// --------------------
// 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());
于 2011-07-22T10:59:08.583 に答える
1

この例を見てください:

function foo1() {
  echo "blub1\n";
  return true;
}

function foo2() {
  echo "blub2\n";
  return false;
}

if (foo1() || foo2()) {
  echo "end.";
}

$ b / foo2()はチェックされていません。ここでのデモ:codepad.org

于 2011-07-22T11:04:20.327 に答える
0

少なくとも1つのORオペランドが真の場合、さらに進んで他のオペランドをチェックする必要はなく、すべてが真と評価されます。

(a || b || c || d || e || ...)少なくとも1つのオペランドが真の場合は真になるため、1つのオペランドが真であることがわかったら、以下をチェックする必要はありません。オペランド。

このロジックは、PHP、JAVA、Cなどのあらゆる場所に適用されます。

于 2011-07-22T11:22:09.613 に答える
0

真理値表をかなりよく知っているなら、おそらく自分でそれを理解することができます。他の人が言っているように、PHPは結果が確実になるまで評価します。ORの場合、ステートメントがtrueを返すには、1つだけがtrueである必要があります。したがって、PHPは真の値が見つかるまで評価します。見つからない場合、ステートメントはfalseと評価されます。

<?php
if(true && willGetCalled()) {}
if(false && wontGetCalled()) {}
if(true || wontGetCalled()) {}
if(false || willGetCalled()) {}
?>
于 2011-07-22T13:46:11.083 に答える