PHP - MySQL [Retour au menu]
Portée des variables

Variables locales et globales, static, global, pointeurs sur variables

Cet exemple définit une variable globale $Lampe = 1;.Cette variable ne sera visible que dans le code principal et PAS dans les fonctions.

$Lampe = 1;
function Test()
  {
  echo $Lampe; //Rien
  }
echo $Lampe; // 1
Test();

L'exemple suivant, de la même trempe que le précédent, va afficher 0, donc :

$Lampe = 5;
$Caribou = 8;

function Test()
  {
  echo $Lampe + $Caribou; // 0
  }
Test();

Si on voulait récupérer le contenu des variables $Lampe et $Caribou dans la fonction, il faudrait utiliser le mot-clé global :

$Lampe = 5;
$Caribou = 8;

function Test()
  {
  global $Lampe , $Caribou;
  echo $Lampe + $Caribou; // 13
  }
Test();

Attention donc, car la fonction peut alors manipuler les vraies variables globales :

$Lampe = 5;
function Test()
  {
  global $Lampe
  $Lampe++;

  }
Test();
echo $Lampe; // 6 !!!

Conservation de la valeur d'une variable locale à une fonction avec static

Sit la fonction Test qui contient une variable $Lampe, qui s'incrémente automatiquement. Appelons cette fonction 2 fois de suite . A chaque appel, la variable $Lampe est réinitialisée.

function Test()
  {
  $Lampe++;
  echo $Lampe;
  }
Test(); // 1
Test(); // 1

Pour conserver la valeur de $Lampe entre chaque appel, on utilise static:

function Test()
  {
  static $Lampe;
  $Lampe++;
  echo $Lampe;
  }
Test(); // 1
Test(); // 2

Evidemment, on ne peut pas avoir dans une même fonction une variable static $Lampe et global $Lampe ! Logique...

Pointeurs sur variables

Imaginons qu'en Suisse il y a une ville qui s'appelle Geneve, composé de plusieurs quartiers, dont Meyrin, lui même flanqué d'un centre commercial.

$Pays = "Suisse";
$$Pays = "Geneve";
$$$Pays = "Meyrin";
$$$$Pays = "CentreCommercial";
echo $Pays; // Suisse
echo $$Pays; // Geneve
echo $$$Pays; // Meyrin
echo $$$$Pays; // CentreCommercial

On peut également y accéder de cette manière (Le contenu de la variable devient son nom):

$Pays = "Suisse";
$$Pays = "Geneve";
$$$Pays = "Meyrin";
$$$$Pays = "CentreCommercial";
echo $Pays; // Suisse
echo $Suisse; // Geneve
echo $Geneve; // Meyrin
echo $Meyrin; // CentreCommercial

Ou encore comme ceci :

$Pays = "Suisse";
$$Pays = "Geneve";
$$$Pays = "Meyrin";
$$$$Pays = "CentreCommercial";
echo $$$Suisse; // Geneve

Logique : $Pays = Suisse, donc $$Pays = Geneve : ça saute une étape. Avec la même logique :

$Suisse = Geneve, donc $$Suisse = Meyrin, et parc conséquent $$$Suisse = CentreCommercial.

---