0

PHP が条件付きの OR 演算子を評価する方法に関するパフォーマンス関連の質問があります。

どちらもブール値を返す 2 つの関数を呼び出す条件があります。

1 つ目はシンプルで高速な関数 - simpleFunction() です。

2 番目は、DB をクエリするより集中的な関数です - tensiveFunction()

最初の単純な関数が TRUE を返した場合、2 番目のより強力な関数は実行されないように、次のように条件を記述できます。

if ( simpleFunction() ) {
   // Do Stuff
} elseif ( intensiveFunction() ) {
   // Do the same stuff (redundant code)
}

私の質問は、PHP 条件で AND 演算子を使用する場合、最初の条件 (演算子の左側) が TRUE の場合、2 番目の関数 (演算子の右側) が実行されますか?

if ( simpleFunction() || intensiveFunction() ) {
    //Do Stuff
}

この条件はループ内で実行されるため、すべての反復で tensiveFunction() を実行することは避けたいと思います。

4

3 に答える 3

6

or演算で true が見つかるとステートメントが終了して , が返されると思いますtrue

一方、and操作では、falsey が見つかるまで実行されます。

于 2013-08-13T22:42:58.753 に答える
2

さらに、さまざまな論理演算子をテストするこのスクリプトを比較します。

<pre>
<?php
function test($bool) {
    echo "I was executed\n";

    return $bool;
}

echo "<b>||-Operator</b>\n";
if (test(true) || test(true)) {
    ;
}

echo "<b>|-Operator</b>\n";
if (test(true) | test(true)) {
    ;
}

echo "<b>or-Operator</b>\n";
if (test(true) or test(true)) {
    ;
}

echo "<b>&&-Operator</b>\n";
if (test(false) && test(true)) {
    ;
}

echo "<b>&-Operator</b>\n";
if (test(false) & test(true)) {
    ;
}

echo "<b>and-Operator</b>\n";
if (test(false) and test(true)) {
    ;
}
?>
</pre>

出力:

||-Operator
I was executed
|-Operator
I was executed
I was executed
or-Operator
I was executed
&&-Operator
I was executed
&-Operator
I was executed
I was executed
and-Operator
I was executed

| 注意してください。& は、出力が真 (&-演算子) にならなくなったり、偽 (|-演算子) にならなくなったりした場合でも、常に 2 番目の部分を実行します。

于 2013-08-13T23:07:48.783 に答える
0

Neal が指摘したように、これをテストする必要がありました。

$hasRun = 'Intesive Function Has NOT Run';

function simpleFunction() {
    return TRUE;    
}

function intensiveFunction() {
    $hasRun = 'Intesive Function Has Run';  
    return TRUE;
}

if ( simpleFunction() || intensiveFunction() ) {
    echo $hasRun;   
}

//Result: Intesive Function Has NOT Run function

はい、最初の条件が TRUE を返すと、条件は終了し、2 番目の条件は評価されません。

于 2013-08-13T22:58:32.610 に答える