119

論理演算子に関して、しばらく前に読んだことを覚えています。論理演算子の場合OR、使用する||方が優れていましたor(またはその逆)。

プロジェクトでこれを使用しなければならなかったのですが、どのオペレーターが推奨されたのか、それが本当だったのか思い出せません。

どちらが良いのか、そしてその理由は?

4

8 に答える 8

158

「より良い」というものはありませんが、より一般的なものは||です。それらは異なる優先順位を持ち||、通常期待されるように機能します。

参照:論理演算子次の例はそこから抜粋したものです):

// The result of the expression (false || true) is assigned to $e
// Acts like: ($e = (false || true))
$e = false || true;

// The constant false is assigned to $f and then true is ignored
// Acts like: (($f = false) or true)
$f = false or true;
于 2011-05-13T22:17:56.250 に答える
49

これらはさまざまな目的で使用され、実際にはさまざまな演算子の優先順位があります。&&and||演算子はブール条件を対象としていますが、andorは制御フローを対象としています。

たとえば、以下はブール条件です。

if ($foo == $bar && $baz != $quxx) {

これは制御フローとは異なります。

doSomething() or die();
于 2011-05-13T22:20:32.877 に答える
32

それぞれの違い|| AND OR and && and ANDは演算子の優先順位です:

$bool = FALSE || TRUE;

  • として解釈される($bool = (FALSE || TRUE))
  • の値$boolTRUE

$bool = FALSE OR TRUE;

  • として解釈される(($bool = FALSE) OR TRUE)
  • の値$boolFALSE

$bool = TRUE && FALSE;

  • として解釈される($bool = (TRUE && FALSE))
  • の値$boolFALSE

$bool = TRUE AND FALSE;

  • として解釈される(($bool = TRUE) AND FALSE)
  • の値$boolTRUE
于 2016-01-18T06:38:05.037 に答える
5

ソース:http ://wallstreetdeveloper.com/php-logical-operators/

論理演算子を操作するためのサンプルコードは次のとおりです。

<html>

<head>
    <title>Logical</title>
</head>

<body>
    <?php
        $a = 10;
        $b = 20;
        if ($a>$b)
        {
            echo " A is Greater";
        }
        elseif ($a<$b)
        {
            echo " A is lesser";
        }
        else
        {
             echo "A and B are equal";
        }
    ?>
    <?php
        $c = 30;
        $d = 40;
        //if (($a<$c) AND ($b<$d))
        if (($a<$c) && ($b<$d))
        {
            echo "A and B are larger";
        }
        if (isset($d))
            $d = 100;
        echo $d;
        unset($d);
    ?>
    <?php
        $var1 = 2;
        switch($var1)
        {
            case 1:  echo "var1 is 1";
                     break;
            case 2:  echo "var1 is 2";
                     break;
            case 3:  echo "var1 is 3";
                     break;
            default: echo "var1 is unknown";
        }
    ?>
</body>
</html>
于 2014-05-07T18:03:55.393 に答える
3

私はそれが古いトピックであることを知っていますが、それでも。仕事でデバッグしているコードで問題が発生したばかりですが、誰かが同様の問題を抱えている可能性があります...

コードが次のようになっているとしましょう。

$positions = $this->positions() || [];

$ this-> position()がfalseまたはnullを返す場合、$ positionは空の配列であると(たとえばjavascriptから慣れているように)期待します。しかし、そうではありません。値がTRUEまたはFALSEであるかどうかは、$ this-> position()が何を返すかによって異なります。

$ this-> position()の値または空の配列を取得する必要がある場合は、次を使用する必要があります。

$positions = $this->positions() or [];

編集:

上記の例は意図したとおりに機能しませんが、真実は同じ||orはありません...これを試してください:

<?php

function returnEmpty()
{
  //return "string";
  //return [1];
  return null;
}

$first = returnEmpty() || [];
$second = returnEmpty() or [];
$third = returnEmpty() ?: [];

var_dump($first);
var_dump($second);
var_dump($third);
echo "\n";

結果は次のとおりです。

bool(false)
NULL
array(0) {
}

したがって、実際に?:は、戻り値または空の配列を設定する場合は、3番目のオプションが正しい解決策です。

$positions = $this->positions() ?: [];

PHP7.2.1でテスト済み

于 2017-11-13T13:37:34.370 に答える
0

あるものが他のものより本質的に優れているとは思いませんが、||に固執することをお勧めします ほとんどの言語のデフォルトだからです。

編集:他の人が指摘しているように、実際には2つの間に違いがあります。

于 2011-05-13T22:17:36.940 に答える
0

悪いことも良いこともありません。演算子の優先順位に依存します。||より優先順位が高いのでor||主に使用されます。

于 2011-09-29T17:13:58.217 に答える
-4

一部の言語は短絡を使用し、他の言語は完全なブール評価を使用します(ご存知の場合、これは$BPascalのディレクティブに似ています)。

説明:

function A(){
    ...Do something..
    return true;
}

function B(){
    ...Do something..
    return true;
}

if ( A() OR B() ) { .....

この例では、関数B()は実行されません。関数A()はTRUEを返すため、ORステートメントの結果は、式の2番目の部分を評価する必要なしに、最初の部分からわかります。

ただし、を使用する( A() || B() )と、最初の部分の値に関係なく、2番目の部分が常に評価されます。

プログラミングを最適化するには、常にどちらか速い方を使用する必要があります(最初の部分が返され、2番目の部分を実際に評価する必要がORある場合を除く)。false

于 2014-10-05T14:54:13.477 に答える