PHP définit et intialise automatiquement certaines variables en fonction du contexte d'utilisation. Ces valeurs sont généralement stockées dans des tableaux associatifs (ie des tables de hachage).

### Le tableau $GLOBALS

Une alternative à l'utilisation d'un mot-clé global est l'utilisation du tableau $GLOBALS, automatiquement créé et mis à jour par PHP. Ce tableau contient une référence sur chacune des variable disponibles dans l'environnement global d'exécution. Les clés de ce tableau sont les noms des variables globales, et les valeurs associées sont les valeurs des variables globales.

Exemple : le tableau $GLOBALS
<!DOCTYPE html> <html lang="fr"> <head><title>Le tableau $GLOBALS</title></head> <body> <?php $x = 'Piat'; // variable globale foreach($GLOBALS as $cle => $valeur) { echo '<p><b>Nom : ', $cle, '</b>'; echo '<br>Valeur : ', $valeur; } ?> </body>

Nous pouvons reprendre l'exemple sur la portée des variables de la façon suivante :

Exemple : variable globale
<!DOCTYPE html> <html lang="fr"> <head><title>variable globale</title></head> <body> <?php $x = 'Piat'; // variable globale echo '<p><b>Dans le script</b>'; echo '<br>valeur de x : ', $x; AfficheVariable(); // appel de la fonction //------------------------------------------------------ function AfficheVariable() { echo '<p><b>Dans la fonction</b>'; echo '<br>valeur de x : ', $GLOBALS['x']; } ?> </body> </html>

### Les superglobales

Vous remarquez que le tableau $GLOBALS n'a pas besoin d'être déclaré avec le mot clé global pour être utilisé dans une fonction. Il s'agit d'une variable superglobale. Les variables superglobales sont accessibles dans tout le script y compris les fonctions (ie elles existent dans tous les contextes).

PHP fournit différentes variables prédéfinies superglobales :

- des variables concernant le serveur web, ou liées à l'environnement d'exécution du script
- des variables transmises par le protocole HTTP : zones de formulaires, cookies, paramètres d'URL, etc.
- des variables concernant la session attachée à l'utilisateur.

### Superglobale URL

Ce sont les variables incluses dans l'URL de la page PHP. Ces variables peuvent provenir d'un formulaire utilisant la méthode GET, ou peuvent être passées directement par le développeur dans l'URL d'appel de la page. Les URL avec variables (ou paramètres) sont de la forme : lapage.php?Nom=piat&Prenom=françois

Toutes les fois qu'un paramètre est trouvé dans l'URL de la page, PHP va le stocker dans un tableau associatif superglobal appelé $_GET.

Exemple : variables GET
<!DOCTYPE html> <html lang="fr"> <head><title>variable GET</title></head> <body> <p>Formulaire avec une méthode get : les zones sont passées au serveur dans l'URL.</p> <form method="get" action="<?php $_SERVER['PHP_SELF']?>"> Nom : <input type="text" name="Nom"> <input type="submit" value="Envoyer" name="bouton"> </form> <?php // Affichage du nom saisi si présent // dans le tableau $_GET, indiquant que le formulaire // a été envoyé au serveur if (isset($_GET['bouton'])) { echo '<hr>Dans la page tableau _GET = ', $_GET['Nom']; maFonction(); } //------------------------------------------------------ function maFonction() { echo '<hr>Dans la fonction sans déclaration globale ', 'tableau _GET = ', $_GET['Nom']; } ?> </body> </html>

### Superglobales de formulaire

Quand un formulaire HTML utilise la méthode POST pour l'envoi des valeurs saisies au serveur (ie à un script PHP), PHP génère automatiquement un tableau associatif superglobal appelé $_POST et contenant les zones du formulaire.

Exemple : variables POST
<!DOCTYPE html> <html lang="fr"> <head><title>variable POST</title></head> <body> <p>Formulaire avec une méthode post : les zones sont passées au serveur dans le corps du message HTTP.</p> <form method="post" action="<?php $_SERVER['PHP_SELF']?>"> Nom : <input type="text" name="Nom"> <input type="submit" value="Envoyer" name="bouton"> </form> <?php // Affichage du nom saisi si présent // dans le tableau $_POST, indiquant que le formulaire // a été envoyé au serveur if (isset($_POST['Nom'])) { echo '<hr>Dans la page tableau _POST = ', $_POST['Nom']; maFonction(); } //------------------------------------------------------ function maFonction() { echo '<hr>Dans la fonction sans déclaration globale ', 'tableau _POST = ', $_POST['Nom']; } ?> </body> </html>

### Superglobale cookie

PHP génère automatiquement un tableau associatif superglobal appelé $_COOKIE et contenant les cookies.

Le code suivant pose un cookie appelé Nom et ayant la valeur piat :
setcookie('Nom','piat') .
On retrouvera la valeur du cookie Nom dans $_COOKIE['Nom'].

### Superglobales du serveur

On peut obtenir diverses informations sur l'environnement du serveur dans le tableau superglobal $_ENV.

Exemple : variables d'environnement
<!DOCTYPE html> <html lang="fr"> <head><title>variables d'environnement</title></head> <body> <?php foreach($_ENV as $cle => $valeur) { echo '<hr><b>Nom : </b>', $cle, '<br><b>Valeur : </b>', $valeur; } ?> </body> </html>

Des informations sur le serveur lui-même sont disponibles dans le tableau superglobal $_SERVER.

Exemple : variables serveur
<!DOCTYPE html> <html lang="fr"> <head><title>variables serveur</title></head> <body> <?php foreach($_SERVER as $cle => $valeur) { echo '<hr><b>Nom : </b>', $cle, '<br><b>Valeur : </b>', $valeur; } ?> </body> </html>

Remarque : Parmi les variables serveurs, la plus utilisée est sans doute PHP_SELF qui représente le nom de la page elle-même.