Nous avons déjà vu comment déclarer et modifier une variable ainsi que leurs types.

Pour ce tutoriel, concentrons-nous sur leur portée ainsi que sur les variables globales.

 

Déposez gratuitement votre projet sur Codeur.com, recevez une quinzaine de devis et sélectionnez le développeur web idéal.

Trouver un développeur web

Les variables Superglobales de PHP

Il est important de savoir que nativement dans PHP, vous avez huit (8) variables dites « superglobales ».

Les propriétés des variables superglobales

Toutes les variables superglobales ont les mêmes propriétés :

  • Leur nom : un symbole dollar ($) typique d’une variable en PHP, un underscore (_) puis son nom en majuscules. Exemple : $_SERVER.
  • Ce sont toutes des tableaux associatifs (associative array).
  • Elle existe déjà lors de l’exécution du code.
  • Elles sont modifiables librement et à tout moment.

Données principales

La variable la plus utilisée est $_SERVER. Elle contient les informations sur :

  • le serveur ;
  • l’utilisateur, tel que : son adresse IP, le navigateur utilisé, ou la langue du système ;
  • la navigation : url, gestion du cache, etc.

En bref, vous l’aurez compris, une véritable mine d’informations.

// IP
if( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
  $ip = $_SERVER['HTTP_CLIENT_IP'];
}
elseif ( ! empty($_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
  $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else {
  $ip = $_SERVER['REMOTE_ADDR'];
}

// Navigateur
$userAgent = $_SERVER['HTTP_USER_AGENT'];
if( strpos($userAgent, 'Opera') || strpos($userAgent, 'OPR/') ) {
  $browser = 'Opera';
}
elseif( strpos($userAgent, 'Edge') ) {
  $browser = 'Edge';
}
elseif( strpos($userAgent, 'Chrome') ) {
  $browser = 'Chrome';
}
elseif( strpos($userAgent, 'Safari') ) {
  $browser = 'Safari';
}
elseif( strpos($userAgent, 'Firefox') ) {
  $browser = 'Firefox';
}
elseif( strpos($userAgent, 'MSIE') || strpos($userAgent, 'Trident/7') ) {
  $browser = 'Internet Explorer';
}
else {
  $browser = 'inconnu';
}

// URL
$url = $_SERVER['REQUEST_URI'];

// Résultat
echo "L'utilisateur {$ip} a demandé la page {$url} depuis le navigateur {$browser}";
// ==> L'utilisateur ::1 a demandé la page /tuto-codeur/03.php depuis le navigateur Chrome

Toutes les variables superglobales

Nous avons juste au-dessus la variable $_SERVER. Il en existe d’autres.

Tout d’abord, nous avons les variables qui servent à enregistrer des informations sur l’utilisateur. L’une d’entre elles, $_SESSION sont les données qui ne vont durer que le temps de la visite de l’utilisateur sur le site. Par exemple son panier sur un site e-commence ou les données RGPD validées. Pour une durée déterminée, c’est-à-dire les cookies, il y a la variable $_COOKIE. Ces deux variables ont un fonctionnement un particulier, nous reviendrons dessus dans un prochain tutoriel.

Après cela, nous avons les variables avec les données de la requête en cours, à commencer par $_GET qui contient les données « query string », ou « données get ». Il s’agit des données passées via l’url après le point d’interrogation. De la même façon, pour les données de type « post », envoyées depuis les formulaires, il y a la variable $_POST. Et pour les fichiers uploadés, il reste encore $_FILES.

Il y a également la variable $_REQUEST, qui est la fusion de $_GET, $_POST et $_COOKIE.

Enfin, il reste la variable $_ENV dans laquelle vous pouvez renseigner les variables d’environnement du serveur et de l’utilisateur. Par exemple, le timezone (fuseau horaire).

 

La portée des variables

Une variable n’est utilisable que dans le « bloc » où est définie et ne peut pas être utilisée ailleurs. Par « bloc » on entend : le fichier, une fonction, une classe.

Exemple 1

function afficherTest() {
  echo $test; // ==> Génère une erreur
}

$test = 'ok';
echo $test; // ==> Affiche "ok"
afficherTest();

Exemple 2

function afficherTest() {
$test = 'ok';
  echo $test; // ==> Affiche "ok"
}
afficherTest();
echo $test; // ==> Génère une erreur

Exemple 3

function creerTest() {
  $test = 'ok';
}

function afficherTest() {
  echo $test; // ==> Génère une erreur
}

creerTest();
afficherTest();
echo $test; // ==> Génère une erreur

 

Créer et utiliser une variable globale

Pour que les exemples ci-dessous ne génèrent plus d’erreur et affichent le contenu de la variable $test, on peut soit utiliser la variable superglobale $_ENV['test'], soit créer une variable globale personnalisée. Pour ce dernier point, rien de plus simple ! Après avoir créé une variable, on utilise global $maVariable; et pour l’appeler depuis un autre blog, on fait de même.

Attention, cela ne fonctionne que pour les variables créées hors d’une fonctione.

Voilà ce que ça donne avec les deux premiers exemples précédents.

Exemple 1

function afficherTest() {
global $test; // +
echo $test; // ==> Affiche "ok"
}

$test = 'ok';
global $test; // +
echo $test; // ==> Affiche "ok"
afficherTest();

Exemple 2

function afficherTest() {
  $test = 'ok';
  global $test;
  echo $test; // ==> Affiche "ok"
}

afficherTest();
global $test;
echo $test; // ==> Génère une erreur

 

Notre astuce pour utiliser les variables globales en PHP

Vous savez maintenant comment utiliser les différentes variables superglobales pré-définies avec PHP et créer vous-même votre propre variable globale.

Sachez qu’il est possible de voir toutes les variables existantes (pré-définies et créées) avec le variable $GLOBALS.

Pour tout problème rencontré avec vos variables, vous pouvez demander l’intervention d’un freelance spécialisé pour vous aider à débloquer la situation. Trouvez un développeur PHP freelance sur Codeur.com !