warum diese beiden Post-Inkremente in PHP die gleiche Antwort geben? [Duplikat]

8

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 !!!

    
user8196822 12.12.2017, 06:23
quelle

3 Antworten

1

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.

    
Evert 12.12.2017 08:19
quelle
-1

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%     
JerzySBG 12.12.2017 07:51
quelle
-3

Dies ist, weil das Zeichen ++ ein inkrementeller Operator für eine Variable ist. Also dein

$a = 1

$a++ = 2

($a+$a++) = (1+2) = 3

Deshalb zeigt es 3 als Antwort.

    
jun drie 12.12.2017 06:32
quelle

Tags und Links