2015-01-13 4 views
6

Perché i valori della variabile in PHP non hanno un comportamento coerente nel seguente codice?Perché l'operatore di pre/post incremento si comporta in modo errato?

<?php 
$piece = 10; 
// output is 10 10 10 10 11 12 
echo $piece . $piece . $piece . $piece++ . $piece . ++$piece; 

$piece = 10; 
// output is 10 10 10 11 12 
echo $piece . $piece . $piece++ . $piece . ++$piece; 

$piece = 10; 
// output is 11 10 11 12 
echo $piece . $piece++ . $piece . ++$piece; 
?> 

La domanda è: perché la prima uscita nell'ultimo esempio è uguale a 11? invece di 10 come sopra 2 esempi.

+0

Operatori di incremento/decremento: http://php.net/manual/en/language.operators.increment.php – solar411

+0

@ solar411 puoi fare riferimento a qualcosa di più specifico? –

+0

Ecco un codepad per questo: http://codepad.org/gEoWxshO. Comportamento molto strano - è come se il pre-incremento nel secondo blocco fosse eseguito di nuovo sul primo '$ pezzo' nel terzo blocco. O forse il post-incremento nel terzo blocco è responsabile, nel qual caso l'incoerenza tra gli esempi non è spiegata. – halfer

risposta

6

Da http://php.net/manual/en/language.operators.precedence.php:

la precedenza e associatività degli operatori solo determinano come le espressioni sono raggruppati, non specificano un ordine di valutazione. PHP non specifica (nel caso generale) specificare in quale ordine viene valutata un'espressione e il codice che presuppone un ordine specifico di valutazione deve essere evitato, poiché il comportamento può cambiare tra le versioni di PHP o in base al codice circostante.

<?php 
$a = 1; 
echo $a + $a++; // may print either 2 or 3 

$i = 1; 
$array[$i] = $i++; // may set either index 1 or 2 
?> 

In altre parole, non si può contare sul ++ con effetto in un momento particolare per quanto riguarda il resto dell'espressione.

+0

Downvoter: cura di commentare? –

+0

Sembra un posto in risposta a me ... –

+0

Non lo sapevo ... molto strano. + 1 – JorgeeFG

Problemi correlati