Die seltsamen Wege des "oder" in PHP

7

PHP or ist ein seltsames Schlüsselwort. Hier ist es in einem Codeausschnitt, der mich verwirrt:

%Vor%

Warum druckt der letzte 0 und nicht 1?

    
Emanuil Rusev 05.08.2010, 12:10
quelle

7 Antworten

21

Dies liegt an der unterschiedlichen Operatorpriorität . Im dritten Fall wird die Zuweisung zuerst behandelt. Es wird so interpretiert:

%Vor%

Der Operator || hat eine andere Priorität. Wenn Sie

verwenden %Vor%

Es wird funktionieren, wie Sie es erwarten.

Siehe das Handbuch zu logischen Operatoren

    
Pekka 웃 05.08.2010, 12:12
quelle
5

Nein, würde ich nicht, das liegt an Vorrang für den Operator :

%Vor%     
NikiC 05.08.2010 12:12
quelle
4

Es ist ($foo = 0) or 1; . or hat einen niedrigeren Vorrang vor Operatoren als = .

Sie sollten in diesem Fall || verwenden, da es eine höhere Priorität als = hat und daher wie erwartet ausgewertet wird.

    
Giuseppe Accaputo 05.08.2010 12:12
quelle
0

IIRC, der Zuweisungsoperator ( = ) hat eine höhere Priorität als or . Somit würde die letzte Zeile wie folgt interpretiert:

%Vor%

Dies ist eine Anweisung, die 0 $foo zuweist, aber 1 zurückgibt. Die erste Anweisung wird interpretiert als:

%Vor%

Als solche wird 1 gedruckt.

    
You 05.08.2010 12:13
quelle
0

Reihenfolge der Vorgänge. Das Wort "oder" hat viel weniger Vorrang als das entsprechende "||". Kleiner als der Zuweisungsoperator. Die Zuweisung erfolgt also zuerst und der Wert der Zuweisung ist der erste Operand für das "oder".

"oder" ist eher für die Flusssteuerung gedacht als für logische Operationen. Sie können etwas wie

sagen %Vor%

wenn get_something codiert ist, um false zurückzugeben oder 0 bei einem Fehler.

    
cHao 05.08.2010 12:15
quelle
0

In den ersten beiden Schnipsel vergleichen Sie 0 oder 1 (im Wesentlichen richtig oder falsch). Im dritten Snippet weisen Sie 0 zu, was funktioniert und somit wahr ist, daher wird die Bedingung oder nicht ausgeführt. hervorgehobener Text

    
Stephen 05.08.2010 12:15
quelle
0

In Ihrem dritten Beispiel hat der Operator = eine höhere Priorität als oder und wird daher zuerst ausgeführt. Die || der oberflächlich gleiche Operator hat eine höhere Priorität als =. Wie du sagst, interessant.

    
Brian Hooper 05.08.2010 12:15
quelle

Tags und Links