Un petit complément d'information. Lorsqu'un script PHP est "lexé", c'est-à-dire lorsqu'il est scanné, les tokens composant le script sont examinés. Une paire de caractères comme "++" signifie un jeton d'incrémentation, comme suit :
<ST_IN_SCRIPTING>"++" {
RETURN_TOKEN(T_INC);
}
Cette "règle" se trouve dans le fichier Zend/language_scanner.l qui accompagne PHP lorsque vous le téléchargez et l'installez. La seule façon pour qu'un script, lorsqu'il est scanné, devienne intelligible pour le lexer en ce qui concerne les variables de pré- ou post-incrémentation est s'il y a une sorte de démarcation telle que l'espacement afin que chaque "+" soit correctement évalué dans son contexte.
Notez qu'il est déconseillé d'écrire un code comme celui qui suit :
<?php
$x=0;
echo $x++ + ++$x;
même s'il sera lexé correctement. La raison pour laquelle nous nous opposons à ce style de codage est qu'il peut être moins qu'apparent pour les cerveaux humains quant à ce qui se passe réellement. L'ordre d'évaluation n'est pas ce qu'il semble être, c'est-à-dire qu'une variable est post-incrémentée et ensuite ajoutée à elle-même avec sa valeur pré-incrémentée.
Par le opcodes les pré- et post-incrémentations se produisent avant l'addition a lieu. Notez également que la post-incrémentation renvoie la valeur d'une variable et l'incrémente ensuite. Ainsi, initialement, la valeur 0 est attribuée à $x, qui est ensuite post-incrémenté de sorte qu'une variable temporaire est renvoyée avec une valeur de zéro. Ensuite, $x est incrémenté pour acquérir une valeur de un. Ensuite, $x est préincrémenté, et ainsi $x passe de la valeur un à deux et sa variable temporaire est évaluée à deux. Enfin, les deux variables temporaires sont ajoutées, de sorte que 0 + 2 == 2
; voir aquí ainsi que aquí .
Aussi, une excellente lecture aquí .
Par ailleurs, dans ce cas, PHP se conforme à son prédécesseur, le langage de programmation C ; cf. aquí .