addition dans une concatenation avec echo

Eléphant du PHP | 187 Messages

05 nov. 2008, 19:21

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

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

05 nov. 2008, 19:27

Et que donne ceci ?
echo 'test'.($var+1).'retest';

ViPHP
ViPHP | 4674 Messages

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 ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 2937 Messages

06 nov. 2008, 16:59

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é.