Ich versuche, den folgenden Code in PHP über localhost auszuführen, aber er gibt die unerwartete Ausgabe!
%Vor%// Antwort ist 3, aber die Antwort sollte aufgrund von Post-Inkrement 2 sein Hier ist ein anderer Code und es gibt die gleiche Antwort! Warum?
%Vor%// Antwort ist immer noch 3 !!!
Das PHP-Handbuch sagt folgendes:
Die Rangfolge und die Assoziativität von Operatoren bestimmen nur, wie Ausdrücke gruppiert werden, sie geben keine Reihenfolge der Auswertung an. PHP legt (im allgemeinen Fall) nicht fest, in welcher Reihenfolge ein Ausdruck ausgewertet wird und Code, der eine bestimmte Reihenfolge der Auswertung annimmt, sollte vermieden werden, da sich das Verhalten zwischen PHP-Versionen oder abhängig vom umgebenden Code ändern kann.
Also, worum es dabei geht, PHP definiert nicht explizit, was das Endergebnis dieser Art von Anweisungen ist, und es kann > sogar zwischen PHP-Versionen wechseln. Wir nennen dieses undefinierte Verhalten, und Sie sollten sich nicht darauf verlassen.
Sie können möglicherweise irgendwo in der Quelle einen genauen Grund finden, warum diese Reihenfolge gewählt wurde, aber es gibt möglicherweise keine Logik dazu.
Ihre zwei Beispiele werden wie folgt bewertet:
%Vor%Wird wirklich:
%Vor%Ihr zweites Beispiel:
%Vor%Wird:
%Vor%Ich hoffe, diese Art von Sinn macht Sinn. Du hast Recht, dass dahinter keine harte Logik steckt.
DAS VERHALTEN DES INKREMENTIERTEN BETRIEBS IN GLEICHER LINIE MIT DER BERECHNUNG IST NICHT DEFINIERT!
Compiler kann anderen Code generieren, als Sie erwarten.
Einfache Antwort von meinem Lehrer:
VERWENDEN SIE NIEMALS INKREMENZ- / VERZÖGERUNGSBETREIBER IN GLEICHER LINIE MIT BERECHNUNGEN!
Das Verhalten ist nicht definiert - Computer berechnen in anderer Reihenfolge als Menschen.
GUT:
%Vor%KANN EIN PROBLEM SEIN (Sie können es falsch lesen):
%Vor%WIRD EIN PROBLEM:
%Vor%BEARBEITEN:
Ich habe den gleichen Code in C ++ geschrieben. Checked Assembler Code und Ergebnis ist wie gesagt: Math mit increment ist keine Logik für Leute, aber man kann nicht sagen, dass jemand es falsch implementiert hat.
Wie jemand im Kommentar gepostet hat:
%Vor%Übersetzt in die menschliche Sprache:
%Vor%Tags und Links php post-increment