Il est de bon ton de se souhaiter la bonne année. Mais vous, et vous seul, pourrez faire en sorte que cette année soit bonne, meilleure que celle qui vient de s'écouler. Apprenez à ne compter que sur vous, car personne n'est plus qualifié que vous-même pour bâtir, réparer ou améliorer votre propre vie. Personne ne fera les choses à votre place. D'ailleurs, tout ce que les autres peuvent faire, c'est souhaiter que vous le fassiez. Et ne croyez pas que tout ceux qui vous entourent vous apporteront des solutions : certains font juste partie de vos problèmes. Transformez vos résolutions en actes, et dans douze mois, retournez-vous et souriez-vous fièrement : C'était long. C'était difficile. Mais ça y est : 2017 était une bonne année, merci Moi.

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.

---