Nel manuale di PHP, operator precedence section, c'è questo esempio:
// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
capisco il comportamento è indefinito a causa del seguente motivo:
Dal x + y = y + x
l'interprete è libero di valutare x
e per l'aggiunta in qualsiasi ordine al fine di ottimizzare la velocità e/o la memoria. Ho concluso questo dopo aver visto il C code example in this article.
La mia domanda è che l'uscita del codice PHP di cui sopra dovrebbe essere 4
non importa in che modo l'espressione e la sub-espressioni vengono valutate:
- op1 = ++ $ a => $ a = 2 , op1 = 2; op2 = $ a ++ => op2 = 2, $ a = 3; 2 + 2 = 4
- op1 = $ a ++ => op1 = 1, $ a = 2; op2 = ++ $ a => op2 = 3, $ a = 3; 1 + 3 = 4
Da dove viene il 5? O dovrei saperne di più su come funzionano gli operatori?
Edit:
Sono stato fissando Incrementing/Decrementing Operators sezione, ma ancora non riuscivo a capire perché 5.
++ $ a: pre-incremento - Incrementi $ a di una, quindi restituisce $ a.
$ a ++: post-incremento - restituisce $ a, quindi incrementi $ uno alla volta.
Hai davvero ottenuto 5 stampati durante l'esecuzione di questo codice? – Ranty
No. Ho sempre avuto 4 con alcune versioni di PHP. È la parola _may_, significa che potrei eseguire questo codice un milione di volte ottenendo il risultato 4 ma non c'è _garantito_. –
@ H2CO3: Sono più interessato a conoscere _why 5_. –