Im PHP-Handbuch Operatoren-Vorrang-Abschnitt gibt es dieses Beispiel:
%Vor%Ich verstehe, dass das Verhalten aus folgendem Grund undefiniert ist:
Seit x + y = y + x
kann der Interpreter x
und y
in beliebiger Reihenfolge für die Addition auswerten, um Geschwindigkeit und / oder Speicher zu optimieren. Ich schloss das nach dem Blick auf die C Codebeispiel in diesem Artikel .
Meine Frage ist, dass die Ausgabe des oben erwähnten PHP-Codes 4
sein sollte, egal wie der Ausdruck und die Unterausdrücke ausgewertet werden:
Woher kommt die 5? Oder sollte ich mehr darüber erfahren, wie die Operatoren funktionieren?
Bearbeiten:
Ich habe Incrementing / Decrementing Operators Abschnitt angesehen, konnte aber immer noch nicht herausfinden warum 5.
++ $ a: Pre-increment - Erhöht $ a um eins, dann gibt $ a zurück.
$ a ++: Post-Inkrement - Gibt $ a zurück, dann erhöht $ a um eins.
$ a wird anfänglich auf 1 gesetzt. Das + + + a präinkminiert dann $ a, bevor es in der Formel verwendet wird, setzt es auf 2 und drückt diesen Wert auf den Lexer-Stapel. Das $ ++ wird dann ausgeführt, weil Incrementor einen höheren Vorrang hat als +, und dieser Wert wird auch auf den Lexer-Stack übertragen; und die Addition, die dann stattfindet, addiert das Ergebnis des Lexer-Stapels zu dem Ergebnis des Lexer-Stapels 3, was ein Ergebnis von 5 ergibt, das dann wiederholt wird. Der Wert von $ a, sobald die Zeile ausgeführt wurde, ist 3.
ODER
%Vor%$ a wird anfänglich auf 1 gesetzt. Wenn die Formel analysiert wird, setzt das + $ ein $ l vor, um es auf 2 zu setzen, bevor es in der Formel verwendet wird (das Ergebnis wird auf den Lexer-Stapel geschoben). Das Ergebnis aus dem Lexer-Stapel und der aktuelle Wert von $ a werden dann addiert, was 4 ergibt; und dieser Wert wird wiederholt. Schließlich wird $ a nachinkrementiert, was einen Wert von 3 in $ a zurücklässt.
Ja, Sie erhalten 5, weil der Operator auf der rechten Seite zuerst nach seiner Priorität / Präzedenz arbeitet und danach der Operator sum (+). Also macht das erste Inkrement es zu 2 und das zweite macht es zu 3 und danach werden beide summieren und geben Sie das Ergebnis als 5
aus %Vor% ++$a
gibt als 2 aus
$a++
wird nur als 2 3 ausgegeben, aber intern wird es inkrementiert.
schliesslich kommt sum als 2 + 3 = 5
vorTags und Links php post-increment operator-precedence pre-increment