Différence entre $a++ et ++$a

Vous avez déjà sans doute écrit des boucles for en PHP et on vous a toujours appris que la syntaxe était for ($a = 0; $a < 10; $a++) ?

Jérémy 🤘
Jérémy 🤘

Vous avez déjà sans doute écrit des boucles for en PHP et on vous a toujours appris que la syntaxe était for ($a = 0; $a < 10; $a++) ? Mais il est préférable de l'écrire plutôt comme cela for ($a = 0; $a < 10; ++$a) et voici pourquoi.

Derrière la notation $a++, il se passe deux choses, l'une au niveau de performances et l'autre qui peut poser un problème dans le code. Voici un petit exemple :

Copier
$a = 1;

$a++; // $a => 2

++$a; // $a => 3
$a = 1;

$a++; // $a => 2

++$a; // $a => 3

Le comportement reste inchangé, mais dans l'OPCache vous aurez deux variables de créer. L'une qui sera $a qui contiendra 1 et l'autre qui sera $x qui contiendra le calcul $a + $a. Puis il va assigner $x à $a pour vous donner le résultat. C'est une performance minime, mais sur une grosse application, cela peut être beaucoup.

L'autre problème est à cause de l'assignation des variables en PHP. Voici un autre exemple :

Copier
$a = 1;

$b = $a++; // $a => 2, $b => 1

$b = ++$a; // $a => 3, $b => 3
$a = 1;

$b = $a++; // $a => 2, $b => 1

$b = ++$a; // $a => 3, $b => 3

La raison est simple, quand PHP va affecter la valeur de $a à $b ET après il va faire le $a++. Alors que si l'on fait l'inverse, il va d'abord faire l'addition et après l'affectation de variable. Une bonne chose à savoir pour éviter de s'arracher les cheveux.

Demo