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?
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 ).
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
istfalse
im Fall von &&
true
im Fall von ||
oder der letzte Wert des Ausdrucks.
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
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))
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.
Tags und Links php perl operator-precedence