par
Hywan » 06 nov. 2008, 16:38
Hey

,
Théoriquement ça devrait fonctionner.
Dans le premier cas, tu (netsupra) effectues une opération de concaténation et juste au milieu, tu effectues une addition. C'est normal que PHP ne sache pas quoi faire. Il faut ajouter des parenthèses pour avoir un ordre de traitement (des priorités). De plus, c'est normal que PHP t'affiche « 1 » en tout premier car c'est la valeur de retour de ton opération : $var + 1 réussie, la valeur de retour est
true donc 1 (sous forme de chaîne de caractère). Et comme il n'a pas de priorités, il commence par évaluer l'opération, l'affiche, puis concatène.
Dans le second cas, tu n'utilises pas la concaténation mais tu envoies pas à pas des données sur la sortie. Donc tu envoies « test », puis ton opération, puis « retest ».
En fait, qu'on utilise la virgule à la place du point, ça n'a pas le même sens. Dans le cas du point, on concatène une chaîne que l'on envoie à echo. Même si ce n'est pas une fonction, on y retrouve des similitudes, et donc on peut dire que echo reçoit en premier argument la chaîne concaténée. Dans le cas de la virgule, on envoie les parties de la chaîne dans chaque argument de la fonction echo (il en existe
n). Donc avec l'exemple : echo $a, $b, $c; echo va recevoir en premier argument $a, en second $b, et en dernier $c. echo traite ses arguments au pas à pas et les envoie les uns après les autres en sortie. En gros, ça revient à faire : echo($a, $b, $c);, donc si tu as echo($a, $b + 7, $c);, c'est normal que $b + 7 soit évaluée avant d'être envoyé en valeur à echo ; ce qui ne se passe pas avec une concaténation, on ne fait pas intervenir les mêmes mécanismes, d'où la nécessité des parenthèses. QED.
Capito ?
Hey :),
Théoriquement ça devrait fonctionner.
Dans le premier cas, tu (netsupra) effectues une opération de concaténation et juste au milieu, tu effectues une addition. C'est normal que PHP ne sache pas quoi faire. Il faut ajouter des parenthèses pour avoir un ordre de traitement (des priorités). De plus, c'est normal que PHP t'affiche « 1 » en tout premier car c'est la valeur de retour de ton opération : $var + 1 réussie, la valeur de retour est [i]true[/i] donc 1 (sous forme de chaîne de caractère). Et comme il n'a pas de priorités, il commence par évaluer l'opération, l'affiche, puis concatène.
Dans le second cas, tu n'utilises pas la concaténation mais tu envoies pas à pas des données sur la sortie. Donc tu envoies « test », puis ton opération, puis « retest ».
En fait, qu'on utilise la virgule à la place du point, ça n'a pas le même sens. Dans le cas du point, on concatène une chaîne que l'on envoie à echo. Même si ce n'est pas une fonction, on y retrouve des similitudes, et donc on peut dire que echo reçoit en premier argument la chaîne concaténée. Dans le cas de la virgule, on envoie les parties de la chaîne dans chaque argument de la fonction echo (il en existe [i]n[/i]). Donc avec l'exemple : echo $a, $b, $c; echo va recevoir en premier argument $a, en second $b, et en dernier $c. echo traite ses arguments au pas à pas et les envoie les uns après les autres en sortie. En gros, ça revient à faire : echo($a, $b, $c);, donc si tu as echo($a, $b + 7, $c);, c'est normal que $b + 7 soit évaluée avant d'être envoyé en valeur à echo ; ce qui ne se passe pas avec une concaténation, on ne fait pas intervenir les mêmes mécanismes, d'où la nécessité des parenthèses. QED.
Capito ?