it-swarm.com.de

Logische Operatoren, || oder oder?

Ich erinnere mich, vor einiger Zeit in Bezug auf logische Operatoren gelesen zu haben, die im Fall von OR mit || war besser als or (oder umgekehrt).

Ich musste dies nur in meinem Projekt verwenden, als es mir wieder einfiel, aber ich kann mich nicht erinnern, welcher Betreiber empfohlen wurde oder ob es überhaupt stimmte.

Was ist besser und warum?

95
drpcken

Es gibt kein "besseres", aber das üblichere ist ||. Sie haben unterschiedliche Vorrang und || würde so funktionieren, wie man es normalerweise erwarten würde.

Siehe auch: Logische Operatoren ( das folgende Beispiel ist von dort genommen):

// 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;
129
Felix Kling

Sie werden für unterschiedliche Zwecke verwendet und haben unterschiedliche Operatorprioritäten. Das && und || Operatoren sind für Boolesche Bedingungen vorgesehen, während and und or für den Kontrollfluss vorgesehen sind.

Das Folgende ist beispielsweise eine Boolesche Bedingung:

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

Dies unterscheidet sich vom Kontrollfluss:

doSomething() or die();
40

Der Unterschied zwischen jeweils || und OR und && und AND ist Operator Priorität :

$bool = FALSE || TRUE;

  • interpretiert als ($bool = (FALSE || TRUE))
  • wert von $bool ist TRUE

$bool = FALSE OR TRUE;

  • interpretiert als (($bool = FALSE) OR TRUE)
  • wert von $bool ist FALSE

$bool = TRUE && FALSE;

  • interpretiert als ($bool = (TRUE && FALSE))
  • wert von $bool ist FALSE

$bool = TRUE AND FALSE;

  • interpretiert als (($bool = TRUE) AND FALSE)
  • wert von $bool ist TRUE
18
John Slegers

Quelle: http://bit.ly/1hxDmVR

Hier ist ein Beispielcode für die Arbeit mit logischen Operatoren:

<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>
5
improgrammer

Ich weiß, dass es ein altes Thema ist, aber immer noch. Ich bin gerade auf das Problem mit dem Code gestoßen, den ich bei der Arbeit debugge, und vielleicht hat jemand ein ähnliches Problem ...

Angenommen, der Code sieht folgendermaßen aus:

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

Sie würden erwarten (wie Sie es beispielsweise von Javascript gewohnt sind), dass wenn $ this-> positions () false oder null zurückgibt, $ positions ein leeres Array ist. Ist es aber nicht. Der Wert ist WAHR oder FALSCH, abhängig davon, was $ this-> positions () zurückgibt.

Wenn Sie den Wert $ this-> positions () oder ein leeres Array benötigen, müssen Sie Folgendes verwenden:

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

EDIT:

Das obige Beispiel funktioniert nicht wie beabsichtigt, aber die Wahrheit ist, dass || und or sind nicht dasselbe ... Versuchen Sie Folgendes:

<?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";

Das ist das Ergebnis:

bool(false)
NULL
array(0) {
}

Also, eigentlich die dritte Option ?: ist die richtige Lösung, wenn Sie den zurückgegebenen Wert oder ein leeres Array festlegen möchten.

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

Getestet mit PHP 7.2.1

1
Zdeněk

Es gibt nichts Schlimmes oder Besseres. Es kommt nur auf die Rangfolge der Bediener an. Schon seit || hat eine höhere Priorität als or, daher || wird meistens verwendet.

0
Nishu Tayal

Ich denke nicht, dass einer von Natur aus besser ist als ein anderer, aber ich würde vorschlagen, bei || zu bleiben weil es in den meisten Sprachen die Standardeinstellung ist.

EDIT: Wie andere darauf hingewiesen haben, gibt es in der Tat einen Unterschied zwischen den beiden.

0
exahex