Médiaforma

PHP MySQL – Portée des variables

Print Friendly, PDF & Email

Les variables définies dans le code sont utilisables partout, hormis dans les fonctions.

<?php
  $a = 10;
  function test() {
    echo "Dans la fonction, \$a = ".$a;
  }
  echo "En dehors de la fonction, \$a = ".$a."<br>";
  test();
?>

Voici le résultat de ce code.

Comme vous pouvez le voir, la variable $a est inaccessible dans la fonction. Son utilisation provoque une erreur à l’exécution. Pour corriger ce problème, il suffit de déclarer la variable $a globale à l’intérieur de la fonction. Il est alors possible de lire, mais également de modifier la variable dans la fonction.

<?php
  $a = 10;
  function test() {
    global $a;
    echo "Dans la fonction, \$a = ".$a."<br>";
    $a = 20;
  }
  echo "Avant l'exécution de la fonction, \$a = ".$a."<br>";
  test();
  echo "Après l'exécution de la fonction, \$a = ".$a."<br>";
?>

Exécutez ce code dans Wampserver. Comme vous pouvez le voir, la vatiable globale $a est bien accessible dans la fonction.

Il est même possible de la modifier globalement. La modification est répercutée dans tout le code, y compris en dehors de la fonction.

Une autre solution consiste à utiliser le tableau associatif $GLOBALS[] :

<?php
  $a = 10;
  function test() {
    echo "Dans la fonction, \$GLOBALS[\"a\"] = ".$GLOBALS["a"]."<br>";
    $GLOBALS["a"] = 20;
  }
  echo "Avant l'exécution de la fonction, \$a = ".$a."<br>";
  test();
  echo "Après l'exécution de la fonction, \$a = ".$a."<br>";
?>

Voici le résultat :

Les variables définies à l’intérieur d’une fonction ont une portée limitée à cette fonction.

Examinez ce code :

<?php
  function test() {
    $a = 10;
    echo "Dans la fonction, \$a = ".$a."<br>";
  }
  echo "Avant l'exécution de la fonction, \$a = ".$a."<br>";
  test();
  echo "Après l'exécution de la fonction, \$a = ".$a."<br>";
?>

A l’exécution, deux erreurs sont détectées : une sur la première instruction echo (car la variable $a n’est pas encore définie) et une sur la dernière instruction echo (car la variable $a n’est pas accessible en dehors de la fonction) :

Nous allons en terminer avec la portée des variables en parlant des variables statiques. La portée d’une variable statique est locale à une fonction, mais elle ne perd pas sa valeur lorsque la fonction est à nouveau appelée.

Examinez ce code :

<?php
  function test() {
    static $a = 10;
    echo "\$a = ".$a."<br>";
    $a++;
  }
  test();
  test();
  test();
  test();
?>

La variable $a est définie statique lors de son initialisation dans la fonction. Cette instruction ne sera exécutée qu’une fois. Les quatre appels de la fonction test() affichent donc successivement les valeurs 10, 11, 12 et 13 pour la variable $a :

Essayez de supprimer le mot static. Que se passe-t-il ?

Pour le savoir, exécutons ce code dans Wampserver.

Comme vous le supposiez certainement, la variable $a vaut 10 à chaque exécution de la fonction test.

Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.