Retour au blog Programmation

Les variables dynamiques en PHP

Aujourd'hui, j'ai eu envie de vous parler d'une notion php très utile, mais pourtant peu connue : les variables dynamiques (aussi appelées « les variables variables »). Cette notion m'a sauvée la vie à plusieurs reprises au cours de ces dernières années !

Qu'est-ce qu'une variable dynamique ?

Une variable dynamique, c'est tout simplement une variable dont le nom est… dynamique. C'est-à-dire que son nom est affecté et utilisé dynamiquement, selon les besoins du script.

Une variable dynamique peut être déclarée de deux manières :

$temp  // variable "classique"
$$temp // 1ère écriture de la variable dynamique
${$temps} // 2ème écriture de la variable dynamique

Voici un exemple tiré de la documentation officielle de php :

$a = 'bonjour';
$$a = 'monde';
echo "$a ${$a}"; // retourne "bonjour monde"
echo "$a $bonjour"; // retourne également "bonjour monde"

Exemple concret d'utilisation des variables dynamiques

Vous le savez peut-être, j'ai créé il y a quelques années un jeu de gestion de centre équestre. Je développe régulièrement de nouvelles fonctionnalités sur ce jeu, et il y a quelques semaines j'ai eu besoin des variables dynamiques.

Le contexte

La demande initiale : ajouter un système permettant aux joueurs d'acheter des chevaux créés aléatoirement.

La problématique : les compétences du cheval doivent être générées dynamiquement en fonction de la race du cheval. Sur les 7 compétences existantes, chaque cheval généré aura des points dans seulement 3 d'entre elles.

Solution 1 : la multitude de « if »

La première méthode consiste à recourir à une multitude de « if » :

$coupling = $reining = $dressage = $jumping = $racing = 0;

if (in_array('coupling', $bestSkills)) $coupling = 10;
if (in_array('reining', $bestSkills)) $reining = 10;
if (in_array('dressage', $bestSkills)) $dressage = 10;
if (in_array('jumping', $bestSkills)) $jumping = 10;
if (in_array('racing', $bestSkills)) $racing = 10;

Solution 2 : utiliser des variables dynamiques

$coupling = $reining = $dressage = $jumping = $racing = 0;

foreach ($bestSkills as $skill) {
     $$skill = 10;
}

Comparatif des deux méthodes

Les deux méthodes fonctionnent parfaitement. Mais la première méthode est bien plus fastidieuse. Elle nécessite en effet davantage de lignes de code, à raison d'une par compétence.

En utilisant les variables dynamiques, peu importe le nombre de compétences : le code ne sera pas plus long. Que j'ai 3 variables ou 300, pas la peine d'écrire une ligne de plus !

Mise en garde

Attention, les variables dynamiques restent une notion très sensible. En effet, elles peuvent potentiellement écraser d'autres noms de variables. Utilisez-les donc avec précaution, de préférence en les isolant dans une méthode dans laquelle il n'est pas possible d'usurper des variables.

Dans de nombreux cas, les tableaux peuvent être une solution alternative plus sûre : pensez-y !

Néanmoins, comme nous venons de le voir, dans certaines situations les variables dynamiques sont réellement très utiles.

Et vous ? Avez-vous déjà eu recours aux variables dynamiques ? Dans quels cas ?

Vous souhaitez développer votre activité ?

Discutons-en ensemble lors d'une visio ! C'est gratuit, et sans engagement.

Réservez un appel gratuit