Operator-Vorrang in Perl und PHP

8

PHP:

%Vor%

Ausgabe 6-16-2 .Ich verstehe die 1 hier nicht.

Perl:

%Vor%

Ausgabe 6-66-2 , ich verstehe die zweite 6 hier nicht.

Weiß jemand den Grund?

Eigentlich weiß ich && hat eine höhere Priorität als and , aber ich habe immer noch Zweifel, wenn ich das vorher weiß.

AKTUALISIEREN

Jetzt verstehe ich die PHP one, was ist mit der Perl one?

    
Je Rog 03.08.2011, 13:26
quelle

5 Antworten

10

Perl betreffend:

Im Gegensatz zu PHP (aber wie Python, JavaScript usw.) geben die booleschen Operatoren keinen booleschen Wert zurück, aber der Wert, den den Ausdruck wahr gemacht hat (oder der letzte Wert) bestimmt das Endergebnis des Ausdrucks ( Quelle ).

%Vor%

wird als

bewertet %Vor%

entspricht $b = (1 && 5) (Zuweisung "gibt den zugewiesenen Wert zurück") und weist 5 auf $b zu.

Die untere Zeile ist: Der Operator-Vorrang ist in Perl und PHP derselbe (zumindest in diesem Fall), aber sie unterscheiden sich darin, welcher Wert von den booleschen Operatoren zurückgegeben wird.

FWIW, PHPs Operatorenpräzedenz findet sich hier .

Was interessanter ist (zumindest war das neu für mich) ist, dass PHP keine Typkonvertierung für die Inkrement- / Dekrementoperatoren vornimmt.

Wenn $b also true ist, bleibt $b++ der Wert als true , während z. $b += 1 weist 2 zu $b zu.

†: Was ich damit meine ist, dass es den ersten (ganz linken) Wert zurückgibt, der

ist
  • bewertet false im Fall von &&
  • bewertet true im Fall von ||

oder der letzte Wert des Ausdrucks.

    
Felix Kling 03.08.2011, 13:37
quelle
6

Erstes Beispiel

%Vor%

Ich hoffe, Sie werden diese Codes nicht in der Produktion verwenden.

Ich bin noob in Perl, aber ich kann vorschlagen, dass ein & amp; & amp; b a oder b zurückgibt (letzter von ihnen, wenn alle in bool konvertiert sind), nicht boolesch, dann $ b = (1 & amp; & amp; $ a = 5) gibt $ b = 5 (ist 5) zurück

    
RiaD 03.08.2011 13:34
quelle
4

Hier ist das Problem: 1 & amp; & amp; 5 gibt 5 in Perl zurück. Sie erhalten das Ergebnis, das Sie erwarten, wenn Sie die Bedingung als if(($b=1) && ($a=5))

codieren     
ennuikiller 03.08.2011 13:44
quelle
2

Für Perl, fig. 2: and hat eine sehr niedrige Priorität in Perl, es ist kein Synonym von && . Daher wird das Beispiel als (($a = 5) and ($b = 1)) ausgeführt, was $ a und $ b auf 5 bzw. 1 setzt und einen Wert des letzten Arguments (d. H. 1) zurückgibt.

Nach ++ s bekommst du 6-2.

    
Dallaylaen 03.08.2011 13:46
quelle
0

beziehen Sie sich auf Ссылка für gute Beispiele

    
Prashant Singh 03.08.2011 13:42
quelle

Tags und Links