Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

Portée des variables avec PHP

Article posté le 13-11-2013 dans la catégorie PHP

PHP peut être parfois un petit peu déroutant quant à l'utilisation des variables, notamment dans le cas d'un beau découpage des fichiers (séparation du code HTML et du PHP). Voici donc quelques cas concrets d'utilisation.

Variable globale... ou pas

Ce cas de figure est celui qui m'a posé problème au début, car ayant commencé à coder en C puis C++.

Voici notre code :

$maVariable = "Eric";
echo $maVariable;
?>

Jusque là pas de problème : tout s'affiche normalement.

Eric

Mais changeons légèrement :

$maVariable = "Eric";
function toutou()
{
    echo $maVariable;
}
toutou();
?>

Et là c'est le drame. Alors qu'en C ou en Java, la console devrait nous afficher "Eric", nous avons droit à...

 Notice: Undefined variable: maVariable in C:\wampa\www\TEST\index.php on line 6

... à voir à rien du tout si vous avez désactivé l'affichage des messages d'erreurs sur votre serveur.

Utilisation globale.. en pratique

Et c'est là une différence importante. Si je veux utiliser ma variable globale dans ma fonction, je peux soit la passer en paramètre (bof bof), soit l'appeler dans la fonction et lui coller le mot clef global pour l'utiliser (sinon c'est une déclaration, en local) :

$maVariable = "Eric";
function toutou()
{
    global $maVariable;
    echo $maVariable;
}
toutou();
?>

Et là, comme par magie, ça marche...

Une autre alternative aurait été d'utiliser le système de variable dites "superglobales". Qu'est ce donc encore? Il s'agit de variables qui existent d'origine dans PHP et qui sont utilisables PARTOUT. Vous utilisez peut être sans le savoir. Des noms? $_GET, $_POST...

PHP prévoit aussi un tableau associatif qui permet d'accéder aux variables globales. Son nom : $GLOBALS.

$maVariable = "Eric";
function toutou()
{
 
    echo  $GLOBALS['maVariable'];
}
toutou();
?>

Un dernier point : les variable statiques

Un point intéressant est le système des variables statiques. Ceux qui font un peu de POO, que ce soit en C++ ou en Java (et PHP bien évidemment) connaissent certainement l'utilisation des variables statiques.

Concrètement, il s'agit de variables dont le contenu ne change pas même quand on quitte leur "contexte". Exemple : en POO, une variable statique est une variable de classe : la variable et son contenu sont identiques à tous les objets instanciés depuis cette classe. Dans une fonction PHP, à chaque fois que la fonction est appelée, la variable aura le même contenu que lors de sa dernière utilisation. Exemple en pratique

function toutou($ajout)
{
    static $maVariable = 0;
    $maVariable = $maVariable + $ajout;
    echo  $maVariable;
}
toutou("4");
toutou("0");
toutou("4");
?>

Ma fonction a pour but d'aditionner la valeur passée en paramètre à la variable "maVariable". Vu que celle ci est initialisée à 0, la premère fois elle affichera "4" (0+4 = 4). Lors du second appel, elle affichera "4" également, car elle garde sa valeur précédente (4+0 = 4), et enfin, lors du troisième appel, rebelotte, elle affichera "8" (4+4 = 8)


Tweet
comments powered by Disqus