Page 1 sur 1

addition dans une concatenation avec echo

Posté : 05 nov. 2008, 19:21
par netsupra
Bonjour,
lorsque je fais
echo 'test' . $var + 1 . 'retest';
Le resultat est que ca m'affihe
1retest
et la partie d'avant ne s'affiche pas.

Par contre, si je fais
echo 'test', $var + 1, 'retest'
ca m'affiche bien :
test1retest

AUriez vous une reponse au pourquoi du comment ?
Merci,
netsupra

Re: addition dans une concatenation avec echo

Posté : 05 nov. 2008, 19:27
par albat
Et que donne ceci ?
echo 'test'.($var+1).'retest';

Posté : 06 nov. 2008, 16:38
par Hywan
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 ?

Posté : 06 nov. 2008, 16:59
par Victor BRITO
Autrement dit, il s'agit d'un problème de précédence des opérateurs, où il se trouve que le point de concaténation (.) et le signe + sont au même niveau de priorité.