La portée des variables en PHP

Oui, en PHP on peut déclarer une variable n’importe où dans notre programme. Au début du programme, à l’intérieur des fonctions, à l’intérieur des boucles etc. Mais leur utilisation est conditionnée par leur emplacement. C’est à dire l’endroit dans le script où on déclare une variable va déterminer l’endroit où la variable va être accessible, c’est-à-dire utilisable. La portée d’une variable désigne justement la partie du script où la variable va être accessible.

Espace global et espace local

Généralement on différencie dans un script (code) PHP deux espaces : un espace global et des espaces locaux.

Toute variable définie en dehors d’une fonction a une portée globale. C’est à dire elle sera accessible et utilisable dans l’espace global (à l’extérieur des espaces locaux propres aux fonctions, aux boucles etc.).

L’inverse est aussi vrai, c’est à dire une variable définie à l’intérieure d’une fonction ou d’une boucle (donc dans un espace local) ne peut pas être directement utilisable dans un espace global (c’est à dire à l’extérieur de la fonction ou de la boucle).

  • Exemple
 
        $x = 5;
        $y = 46;
        echo $x + $y;    //la somme sera bien affichée sans aucun problème
    

Supposons que nous modifions un peu ce code et créons une fonction à l’intérieur de laquelle on va essayer d’utiliser les variables $x et $y qui sont bien entendu des variables globales.

 
        $x = 5;
        $y = 46;
        function somme()
        {
            echo $x + $y;
        }
    

Dans ce cas, on va rencontrer un problème et le PHP affiche une erreur qui nous indique que les variables $x et $y ne sont pas définies.

L’inverse est aussi vrai. En effet, considérons maintenant le code suivant :

 
       function somme(){    
        $x=4 ;
        $y=12 ;
        echo $x+$y;   
        }
    

Cette somme sera affiché sans aucun problème, puisque les variables $x et $y sont définies localement et utilisées localement.

Mais voyons maintenant si on essaye d’utiliser ces variables en dehors de la fonction somme(), c’est-à-dire dans un espace global.

 
       function somme(){    
        $x=4 ;
        $y=12 ;
        }
        echo $x;   // On obtient un message d’erreur
    

Le mot clé global

Comment utiliser une variable de portée globale dans un espace local?

Après avoir compris la notion de portée d’une variable. Il nous parait logique qu’une variable locale ne peut pas être utilisé dans un espace global. Mais franchement l’inverse paraît moins convaincant. Pas de soucis, il y a plusieurs méthodes qui nous permettent d’utiliser une variable globale dans espace local (à l’intérieur d’une fonction par exemple).

Il suffit de préciser à l’intérieur de la fonction que les variables sont globales par le mot clé global

Reprenons le code suivant :

 
        $x = 4;
        $y = 12;
        function somme()
        {
            global $x;
            global $y;
            echo $x + $y;
        }
        somme();
    

Et dans ce cas tout fonctionne bien.

  • Remarque

Cependant, il n’existe pas un moyen d’utiliser une variable locale (définie à l’intérieur d’une fonction par exemple) dans un espace global sauf si cette fonction return cette variable.

Notez donc qu’une variable locale n’aura toujours qu’une portée locale et que sa portée ne pourra pas être étendue dans l’espace global.

Le mot clé Static

Une variable locale, définie à l’intérieur d’une fonction, sera détruite ou supprimée dès la fin de l’exécution de la fonction.

Mais parfois on a besoin de sa valeur finale pour l’utiliser lors d’une autre exécution de la fonction. Pour pouvoir faire cela on utilise le mot clé static.

Voyons d’abord un exemple sans l’utilisation de ce mot clé static.

  • Exemple
 
        function incrementer()
        {
            $x = 0;
            echo 'La valeur de la variable x est: ' . $x . ' 
'; $x++; } incrementer(); incrementer(); incrementer(); incrementer(); incrementer(); incrementer(); incrementer(); incrementer();

L’exécution du programme donne l’affichage suivant :

La valeur de la variable x est: 0
La valeur de la variable x est: 0
La valeur de la variable x est: 0
La valeur de la variable x est: 0
La valeur de la variable x est: 0
La valeur de la variable x est: 0
La valeur de la variable x est: 0
La valeur de la variable x est: 0

On constate qu’à chaque nouvelle exécution de la fonction incrementer(), la valeur initiale de la variable $x qui est prise en compte et l’exécution de l’instruction d’incrémentation $x++ n’a aucun effet.

Voyons maintenant ce que donner le même code en déclarant la variable $x à l’aide du mot clé static

 
        function incrementer()
        {
            static $x = 0;
            echo 'La valeur de la variable x est: ' . $x . ' 
'; $x++; } incrementer(); incrementer(); incrementer(); incrementer(); incrementer(); incrementer(); incrementer(); incrementer();

L’exécution du programme donne l’affichage suivant :

La valeur de la variable x est: 0
La valeur de la variable x est: 1
La valeur de la variable x est: 2
La valeur de la variable x est: 3
La valeur de la variable x est: 4
La valeur de la variable x est: 5
La valeur de la variable x est: 6
La valeur de la variable x est: 7

On constate bien à chaque nouvelle exécution de la fonction la valeur finale de la variable $x qui est prise en compte.

Si vous avez aimé cet article, aidez-nous à le partager et n’hésitez pas à laisser votre commentaire.

Maitriser HTML et CSS: du débutant à Expert

Si vous souhaitez apprendre le HTML et le CSS, plongez dans l'univers captivant de la conception web avec le livre (ebook) "Maitriser HTML et CSS : du Débutant à Expert" publié sur Amazon. Vous trouverez dans ce livre tout ce que vous avez besoin pour développer vos compétences en HTML et CSS. Ce livre sera votre référence en HTML et CSS. C'est votre ticket pour un voyage extraordinaire où vous découvrirez les fondations du web, devenant ainsi le maître de votre propre espace en ligne. Cliquez sur l'image ci-dessous pour y accéder directement.