Article mis à jour le : 05-05-2022
Concepts et exemples sur la portée des variables avec PHPPHP 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.
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.
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.
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 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).