86 votes

Quelle est la différence entre ++$i et $i++ en PHP?

Quelle est la différence entre ++$i et $i++ en PHP?

99voto

jldupont Points 31331

++$i est pré-incrémentation, tout en $i++ post-incrémentation.

  • pré-incrémentation: incrémenter la variable i d'abord, puis de référence.
  • la post-incrémentation: de référence et puis incrémenter i

"Profiter du fait que PHP vous permet de post-incrémentation ($i++) et la pré-incrémentation (++$i). Le sens est la même aussi longtemps que vous n'êtes pas écrit quelque chose comme $j = $i++, cependant pré-incrémentation est de près de 10% plus rapide, ce qui signifie que vous devriez commutateur de post - pré-incrémentation lorsque vous avez la possibilité, en particulier dans les boucles serrées et surtout si vous êtes pointilleux sur micro-optimisations!" - TuxRadar

Pour plus de précisions, post-incrémentation en PHP a été documenté que le stockage d'une variable temporaire qui attribue à ce 10% de frais généraux vs pré-incrémentation.

74voto

scraimer Points 7000

++$i par incréments $i, mais évalue à la valeur de $i+1 $i++ par incréments $i, mais renvoie l'ancienne valeur de $i.

Voici un exemple:

$i = 10;
$a = $i++;
// Now $a is 10, and $i is 11

$i = 10;
$a = ++$i;
// Now $a is 11, and $i is 11

Il y a parfois une légère performance coût d'utilisation $i++. Vous voyez, quand vous faites quelque chose comme

$a = $i++;

Vous êtes vraiment en train de faire ceci:

$temporary_variable = $i;
$i=$i+1;
$a=$temporary_variable;

43voto

Gumbo Points 279147

++$i est pré-incrémentation

  1. $i est incrémenté
  2. la nouvelle valeur est renvoyée

$i++ post-incrémentation

  1. la valeur de $i copié d'une variable temporaire
  2. $i est incrémenté
  3. la copie interne de l'ancienne valeur de $i est retourné

14voto

SjB Points 6823
++$i //first increment $i then run line
$i++ //first run line then increment $i 

12voto

2astalavista Points 7092

dans ce cas, il n'y a pas de différence:

for($i = 0;$i<3;++$i)var_dump $i;
/*
int(0)
int(1)
int(2)
*/
for($i = 0;$i<3;$i++)var_dump $i;
/*
int(0)
int(1)
int(2)
*/

mais:

for($i = 0;$i<3; $j = ++$i )var_dump($j);
/*
NULL
int(1)
int(2)
*/
for($i = 0;$i<3; $j = $i++ )var_dump($j);
/*
NULL
int(0)
int(1)
*/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X