
ts.
Ich habe eine Codebasis, für deren Verwendung sich Entwickler entschieden haben AND
und OR
anstatt &&
und ||
.
Ich weiß, dass es einen Unterschied in der Priorität der Operatoren gibt (&&
geht vor and
), aber mit dem gegebenen Rahmen (PrestaShop um genau zu sein) ist es eindeutig kein Grund.
Welche Version verwendest du? Ist and
besser lesbar als &&
? Oder gibt es keinen Unterschied?

Machtherr
Wenn du benutzt AND
und OR
wirst du irgendwann über so etwas stolpern:
$this_one = true;
$that = false;
$truthiness = $this_one and $that;
Willst du raten, was $truthiness
gleich?
Wenn du gesagt hättest false
… bzzzt, sorry, falsch!
$truthiness
oben hat den Wert true
. Warum? =
hat ein höheren Vorrang als and
. Das Hinzufügen von Klammern zur Darstellung der impliziten Reihenfolge macht dies klarer:
($truthiness = $this_one) and $that
Wenn Sie verwendet haben &&
anstatt and
Im ersten Codebeispiel würde es wie erwartet funktionieren und sein false
.
Wie in den Kommentaren unten besprochen, funktioniert dies auch, um den richtigen Wert zu erhalten, da Klammern eine höhere Priorität haben als =
:
$truthiness = ($this_one and $that)

adamJLev
Je nachdem, wie es verwendet wird, kann es notwendig und sogar praktisch sein.
http://php.net/manual/en/language.operators.logical.php
// "||" has a greater precedence than "or"
// 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;
Aber in den meisten Fällen scheint es eher eine Sache des Entwicklergeschmacks zu sein, wie jedes Vorkommen davon, das ich im CodeIgniter-Framework gesehen habe, wie @Sarfraz erwähnt hat.
Seit and
hat einen niedrigeren Vorrang als =
Sie können es in der Bedingungszuweisung verwenden:
if ($var = true && false) // Compare true with false and assign to $var
if ($var = true and false) // Assign true to $var and compare $var to false
Aus Sicherheitsgründen setze ich meine Vergleiche immer in Klammern und platziere sie. Auf diese Weise muss ich mich nicht auf die Operatorpriorität verlassen:
if(
((i==0) && (b==2))
||
((c==3) && !(f==5))
)

arviman
Vorrang unterscheidet sich zwischen && und und (&& hat Vorrang vor und), was in Kombination mit einem ternären Operator zu Verwirrung führt. Zum Beispiel,
$predA && $predB ? "foo" : "bar"
wird a zurückgeben Schnur wohingegen
$predA and $predB ? "foo" : "bar"
wird a zurückgeben boolesch.

Mahmoud Zalt
Lassen Sie mich den Unterschied zwischen “und” – “&&” – “&” erklären.
“&&” und “and” sind beides logische UND-Verknüpfungen und sie tun dasselbe, aber die Operatorpriorität ist unterschiedlich.
Der Vorrang (Priorität) eines Operators gibt an, wie “fest” er zwei Ausdrücke miteinander verbindet. Im Ausdruck 1 + 5 * 3 ist die Antwort beispielsweise 16 und nicht 18, da der Multiplikationsoperator (“*”) eine höhere Priorität hat als der Additionsoperator (“+”).
Das Mischen in einem einzigen Vorgang kann in einigen Fällen zu unerwarteten Ergebnissen führen
Ich empfehle, immer && zu verwenden, aber das ist Ihre Wahl.
Andererseits ist “&” ein bitweise UND-Verknüpfung. Es wird für die Auswertung und Manipulation bestimmter Bits innerhalb des ganzzahligen Werts verwendet.
Beispiel: Wenn Sie (14 & 7) machen, wäre das Ergebnis 6.
7 = 0111
14 = 1110
------------
= 0110 == 6

Salat
welche Version verwendest du?
Wenn die Codierungsstandards für die bestimmte Codebasis, für die ich Code schreibe, angeben, welcher Operator verwendet werden sollte, werde ich es tun bestimmt verwende das. Wenn nicht, und der Code diktiert was verwendet werden sollte (nicht oft, kann leicht umgangen werden), dann werde ich das verwenden. Andernfalls, wahrscheinlich &&
.
Ist ‘and’ besser lesbar als ‘&&’?
Ist es besser lesbar für dich. Die Antwort ist Ja und nein hängt von vielen Faktoren ab, einschließlich des Codes um den Bediener und tatsächlich die Person, die ihn liest!
|| gibt es ~ unterschied?
Jawohl. Sehen logische Operatoren zum ||
und bitweise Operatoren zum ~
.
9895500cookie-check‘AND’ vs ‘&&’ als Operatoryes
Beachten Sie, dass
~
ist der bitweise NOT-Operator und nicht der logische. 😉– Gumbo
10. Mai 2010 um 14:26 Uhr
Ja, ich weiß. Schlechte Angewohnheiten 🙂 . Es ist ein bisschen seltsam, dass es in PHP ‘and’, ‘or’ und ‘xor’ gibt, aber kein ‘not’, oder?
– ts.
12. Mai 2010 um 10:30 Uhr
@ts: Die richtige Antwort hier ist die von R. Bemrose bereitgestellte stackoverflow.com/questions/2803321/and-vs-as-operator/…
– Marco Demaio
24. Mai 2011 um 15:45 Uhr
! ist der logische Not-Operator
– Messersturm
30. Mai 2011 um 8:15 Uhr
@chiliNUT ganz richtig. Damals muss es Sinn gemacht haben. Sieht so aus, als wäre die lauernde falsche Antwort an dieser Stelle bestraft worden 🙂
– Doppeljosch
28. März 2014 um 19:34 Uhr