>> pour les lire , il ne suffisait pas juste de faire un
echo $nom_page".$i."";
non, comme j'ai dit en haut, tu demandes d'afficher deux variables.
si tu veux tout comprendre de A à Z, on va bosser avec la notation polonaise inversée (bouh ), présente sur certaines calculatrices et similaire au fonctionnement interne d'un langage.
ie + 1 2 veut en fait dire 'calculer 1 + 2'. dans un langage, c'est représenté sous forme d'une pile, qu'on lit de bas en haut :
2
1
+
à l'éxécution, php regarde ce qu'il y a dans la pile, voit qu'il y a un opérateur +, et appelle la fonction +. la fonction + se charge de chopper les deux opérandes (paramètres, 1 et 2 ici) avec une fonction interne (qu'on va eppeler getOperand()), fait l'addition, et remplace la stack avec le résultat :
3
ensuite, tu as la notion de priorité des opérateurs, ie 1 + 2 * 3 sera converti en :
2
3
*
1
+
la fonction appelle lorsqu'elle choppe ses paramètres getOperand(). getOperand() regarde ce qu'il y a dans la pile, si c'est un nombre (1) elle renvoie ce nombre, si c'est un opérateur (ici, *) elle appelle la fonction liée à cet opérateur, qui va réaliser la même opération que '+' plus haut pour la multiplication. donc après l'appel à *, ta pile ressemblera à :
6
1
+
maintenant, on appelle +, on a :
7
hop, tout con.
en php, $ charge dans la pile la variable correspondant au symbole contenu dans l'entrée suivante de la pile (un nom, ici nom_page)
mettons que nom_page est une variable qui vaut "bonjour" :
nom_page
$
après éxécution de la fonction associée à $, tu as dans ta pile :
"bonjour"
comment est éxécuté un echo $nom_page ? pareil, echo est une référence à une fonction interne de php, qui demande une opérande :
nom_page
$
echo
echo appelle getOperand() qui éxécuté $ et ramène la pile à :
"bonjour"
echo
echo affiche alors "bonjour".
en php, . est l'opérateur de concaténation de deux chaînes, ie "bonjour" . " mario" renvoie "bonjour mario".
sur la pile, ça donne :
" mario"
"bonjour"
.
après éxécution de la fonction ., tu obtiens
"bonjour mario"
maintenant, quand tu demandes (mettons que nom_page vaut "bonjour", $i vaut 5)
echo $nom_page . $i
tu demandes en fait la concaténation des deux variables nom_page et i. la pile devient alors
i
$
nom_page
$
.
echo
à l'éxécution, echo appelle getOperand() qui tombe sur l'opérateur de concaténation . qui a donc besoin de deux paramètres. il appelle deux fois getOperand() :
la première fois, il tombe sur un opérateur $ qui va donc chercher la variable $i:
5
nom_page
$
.
echo
la seconde fois, il tombe à nouveau sur un opérateur $ qui va ici chercher la variable $nom_page :
5
"bonjour"
.
echo
maintenant que . a ses deux opérandes, il peut réaliser la concaténation :
"bonjour5"
echo
et passer le résultat à echo qui affiche "bonjour5".
//
quand tu fais ton code echo $nom_page . $i, nom_page n'existe pas, il concatène une chaîne vide avec la valeur de i, et passe cette valeur à echo.
ce que tu veux, c'est recréer le nom de la variable "nom_page" + un entier. par ex si i vaut 1, il faut donc que la pile, en interne, ressemble à :
nom_page1
$
echo
1 étant la valeur de $i, on veut donc chopper la variable dont le nom est la concaténation de nom_page et de i :
i
$
nom_page
.
$
echo
soit en php echo $(nom_page . $i)
soit la forme 'compactée' de
$maVariable = 'nompage' . $i;
echo $$maVariable;
qui peut $etre assemblé pour la première ligne par :
i
$
nom_page
.
maVariable
$
=
qui va créer une nouvelle variable 'maVariable' contenant le nom de la page.
la seconde ligne devient :
maVariable
$
$
echo
echo appelle getOperand(), qui tombe sur la fonction 'va chercher la variable', qui lui même tombe sur la fonction 'va chercher la variable'. cette seconde fonction va retourner :
nom_page1
$
echo
la première fonction peut donc récupérer la variable appelée nom_page1, et la passer à echo.
//
tu n'as pas besoin de connaître tout ça pour programmer, ça te sera juste très utile. une fois que tu l'as dans la tête, c'est limpide.