Ich erinnere mich , eine Weile zurück in Bezug auf die logischen Operatoren zu lesen , dass im Falle OR
, indem ||
war besser als or
(oder umgekehrt).
Ich musste dies nur in meinem Projekt verwenden, als es zu mir zurückkam, aber ich kann mich nicht erinnern, welcher Operator empfohlen wurde oder ob es überhaupt wahr war.
Was ist besser und warum?
php
operators
logical-operators
or-operator
Es ist ausgesprochen
quelle
quelle
$e = true || $x = 'foo'
wird nicht$x
wegen Kurzschluss definiert, nicht wegen höherer Priorität.27 or 0
kehrt27
für mich zurück.or
das auch Boolesche Werte zurückgibt. Nur seine Priorität ist so niedrig, dass es manchmal so aussieht, als würde es etwas anderes tun . :)print 27 or 0
würde drucken,27
weilor
es danach passiertprint 27
. Übrigens, lässtecho
sich nicht täuschen -echo 27 or 0
würde ausgeben1
.Sie werden für unterschiedliche Zwecke verwendet und haben tatsächlich unterschiedliche Operatorprioritäten. Die
&&
und||
Operatoren für Boolesche Bedingungen bestimmt, währendand
undor
für die Ablaufsteuerung vorgesehen sind.Das Folgende ist beispielsweise eine boolesche Bedingung:
Dies unterscheidet sich vom Kontrollfluss:
quelle
die()
Funktion wird aufgerufen, wenn zurückgegebendoSomething()
wirdfalse
odernull
? Was ist, wenndoSomething()
zurücktrue
oder nichts?doSomething()
wird als Boolescher Wert ausgewertet. Wenn es einen Wert zurückgibt, den PHP für wahr hält (true
, eine nicht leere Zeichenfolge usw.), wird es nicht aufgerufendie()
.Der Unterschied zwischen jeweils || und OR und && und AND haben Vorrang vor dem Operator :
$bool = FALSE || TRUE;
($bool = (FALSE || TRUE))
$bool
istTRUE
$bool = FALSE OR TRUE;
(($bool = FALSE) OR TRUE)
$bool
istFALSE
$bool = TRUE && FALSE;
($bool = (TRUE && FALSE))
$bool
istFALSE
$bool = TRUE AND FALSE;
(($bool = TRUE) AND FALSE)
$bool
istTRUE
quelle
Quelle: http://wallstreetdeveloper.com/php-logical-operators/
Hier ist ein Beispielcode für die Arbeit mit logischen Operatoren:
quelle
Ich weiß, dass es ein altes Thema ist, aber immer noch. Ich habe gerade das Problem in dem Code getroffen, den ich bei der Arbeit debugge, und vielleicht hat jemand ein ähnliches Problem ...
Angenommen, der Code sieht folgendermaßen aus:
Sie würden erwarten (wie Sie es von z. B. Javascript gewohnt sind), dass $ positions ein leeres Array ist, wenn $ this-> positions () false oder null zurückgibt. Aber es ist nicht so. Der Wert TRUE oder FALSE hängt davon ab, was $ this-> positions () zurückgibt.
Wenn Sie den Wert von $ this-> positions () oder ein leeres Array erhalten möchten, müssen Sie Folgendes verwenden:
BEARBEITEN:
Das obige Beispiel funktioniert nicht wie beabsichtigt , aber die Wahrheit ist , dass
||
undor
ist nicht das gleiche ... Versuchen Sie folgendes:Das ist das Ergebnis:
Die dritte Option
?:
ist also die richtige Lösung, wenn Sie einen zurückgegebenen Wert oder ein leeres Array festlegen möchten.Getestet mit PHP 7.2.1
quelle
$positions = $this->positions() ?? [];
ist wahrscheinlich was du willst.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 tatsächlich einen Unterschied zwischen den beiden.
quelle
Es gibt nichts Schlechtes oder Besseres. Es hängt nur von der Priorität der Bediener ab. Da
||
hat höhere Priorität alsor
, so||
wird meistens verwendet.quelle
Einige Sprachen verwenden einen Kurzschluss, andere eine vollständige boolesche Auswertung (wenn Sie wissen, ähnelt dies der Direktive
$B
in Pascal).Erklärungen:
In diesem Beispiel wird die Funktion
B()
niemals ausgeführt. Da die FunktionA()
TRUE zurückgibt, ist das Ergebnis der OR-Anweisung aus dem ersten Teil bekannt, ohne dass der zweite Teil des Ausdrucks ausgewertet werden muss.Mit
( A() || B() )
wird jedoch immer der zweite Teil unabhängig vom Wert des ersten ausgewertet.Für eine optimierte Programmierung sollten Sie immer
OR
die schnellere verwenden (außer in dem Fall, in dem der erste Teil zurückkehrtfalse
und der zweite Teil tatsächlich ausgewertet werden muss).quelle
||
,B
wird nicht aufgerufen werden. Beide Operatoren machen genau das Gleiche, außer dass die Priorität unterschiedlich ist.