Was soll die Ausgabe von echo sein? ++ $ a + $ a ++ [duplicate]

Diese Frage hat hier bereits eine Antwort:

Warum ist $ a + ++ $ a == 2? 13 Antworten

Im PHP-HandbuchOperator-Vorrang-Abschnittgibt es dieses Beispiel:

// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5

Ich verstehe, dass das Verhalten aus folgendem Grund undefiniert ist:

Schon seitx + y = y + x Der Dolmetscher kann frei bewertenx undy Zum Hinzufügen in beliebiger Reihenfolge, um die Geschwindigkeit und / oder den Speicher zu optimieren. Ich schloss dies nach dem Blick auf dieC-Codebeispiel in diesem Artikel.

Meine Frage ist, dass die Ausgabe des oben genannten PHP-Codes sein soll4 egal wie der Ausdruck und die Unterausdrücke ausgewertet werden:

op1 = ++ $ a => $ a = 2, op1 = 2; op2 = $ a ++ => op2 = 2, $ a = 3; 2 + 2 = 4op1 = $ a ++ => op1 = 1, $ a = 2; op2 = ++ $ a => op2 = 3, $ a = 3; 1 + 3 = 4

Woher kommen die 5? Oder sollte ich mehr darüber erfahren, wie die Bediener arbeiten?

Bearbeiten:

Ich habe angestarrtInkrementieren / Dekrementieren von Operatoren Abschnitt, konnte aber immer noch nicht herausfinden, warum 5.

++ $ a: Pre-Increment - Inkrementiert $ a um eins,dann gibt $ a zurück.
$ a ++: Post-Inkrement - Gibt $ a zurück,dann erhöht $ a um eins.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage