Noms dynamiques de variables

Concaténer des noms de variables et manipuler des listes de variables



Manipuler des variables dont le nom est aussi variable

Il est parfois pratique d'utiliser des noms de variables qui sont eux-même des variables.
Par exemple, en créant une page, on définit et utilise les variables $var1, $var2, $var3, …, $var10.

Après avoir fait ceci, on voudrait pouvoir manipuler automatiquement toutes ces variables. Après coup, on peut se dire que la bonne démarche serait de reprendre la programmation de la page et créer au lieu de ces 10 variables $var1, …, $var10 une seule variable $var qui est un tableau contenant 10 entrées.

Si on ne veut pas retoucher à toutes la page, on peut néanmoins faire appel aux noms dynamiques de variables, qui permettent de considérer le nom lui-même de la variable comme une variable.
On aimerait donc ici utiliser la variable $v="var".$i elle-même comme un nom de variable.
C'est possible en php: les noms de variables sont préfixées par un "$", tandis que les variables dynamiques par deux: "$$". Dans l'exemple précédent, avec $i=2 par exemple, $v="var".$i est la chaîne de caractères "var2".
On utilise alors la variable nommée $var2 en utilisant $$v.


Un exemple complet

Dans le contexte précédent, par exemple pour simplifier avec 3 variables $var1, $var2 et $var3
<?php 
$var1="Ma 1ère variable";
$var2="Ma 2ème variable";
$var3="Ma 3ème variable";
?>

On peut alors accéder à ces variables en créant dynamiquement une variable $vardyn dont le nom lui-même change et qui va être tour à tour chacune de ces 3 variables:
<?php 
$var1="Ma 1ère variable";
$var2="Ma 2ème variable";
$var3="Ma 3ème variable";

for ($i=1;$i<=3;$i++) {
  $vardyn="var".$i;
  echo "Var".$i." = ".$$vardyn."<br>";}
?>
ce qui affiche:
Var1 = Ma 1ère variable
Var2 = Ma 2ème variable
Var3 = Ma 3ème variable
On peut bien sûr aussi alors modifier les variables ou tout autre chose:
<?php 
$var1="Ma 1ère variable";
$var2="Ma 2ème variable";
$var3="Ma 3ème variable";

for ($i=1;$i<=3;$i++) {
  $vardyn="var".$i;$$vardyn="Maintenant variable ".$i*10;
}
echo "var1 = ".$var1."<br>";
echo "var2 = ".$var2."<br>";
echo "var3 = ".$var3."<br>";
?>
qui retourne et affiche:
var1 = Maintenant variable 10
var2 = Maintenant variable 20
var3 = Maintenant variable 30
LongPage: h2: 3 - h3: 0