私はこれが単純な質問でなければならないことを知っていますが、PHPではこのようなステートメントでそれを知っています
if ($a && $b) { do something }
$ aがfalseの場合、PHPは$bもチェックしません
ORについても同じことが言えます。
if ($a || $b) { do something }
$ aが真の場合でも、$ bをチェックしますか?
これは初歩的なものだと知っていますが、どこにも答えが見つかりません...ありがとう
私はこれが単純な質問でなければならないことを知っていますが、PHPではこのようなステートメントでそれを知っています
if ($a && $b) { do something }
$ aがfalseの場合、PHPは$bもチェックしません
ORについても同じことが言えます。
if ($a || $b) { do something }
$ aが真の場合でも、$ bをチェックしますか?
これは初歩的なものだと知っていますが、どこにも答えが見つかりません...ありがとう
論理式の評価は、結果がわかるとすぐに停止されます。
マニュアルの「論理演算子」ページの例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());
この例を見てください:
function foo1() {
echo "blub1\n";
return true;
}
function foo2() {
echo "blub2\n";
return false;
}
if (foo1() || foo2()) {
echo "end.";
}
$ b / foo2()はチェックされていません。ここでのデモ:codepad.org
少なくとも1つのORオペランドが真の場合、さらに進んで他のオペランドをチェックする必要はなく、すべてが真と評価されます。
(a || b || c || d || e || ...)少なくとも1つのオペランドが真の場合は真になるため、1つのオペランドが真であることがわかったら、以下をチェックする必要はありません。オペランド。
このロジックは、PHP、JAVA、Cなどのあらゆる場所に適用されます。
真理値表をかなりよく知っているなら、おそらく自分でそれを理解することができます。他の人が言っているように、PHPは結果が確実になるまで評価します。ORの場合、ステートメントがtrueを返すには、1つだけがtrueである必要があります。したがって、PHPは真の値が見つかるまで評価します。見つからない場合、ステートメントはfalseと評価されます。
<?php
if(true && willGetCalled()) {}
if(false && wontGetCalled()) {}
if(true || wontGetCalled()) {}
if(false || willGetCalled()) {}
?>