PHP Variables globales définies par l'utilisateur


Exemple

La portée en dehors de toute fonction ou classe est la portée globale. Lorsqu'un script PHP en inclut un autre (en utilisant include ou require ), la portée reste la même. Si un script est inclus en dehors de toute fonction ou classe, ses variables globales sont incluses dans la même étendue globale, mais si un script est inclus dans une fonction, les variables du script inclus sont dans la portée de la fonction.

Dans le cadre d'une méthode de fonction ou de classe, le mot clé global peut être utilisé pour créer un accès aux variables globales définies par l'utilisateur.

<?php

$amount_of_log_calls = 0;

function log_message($message) {
    // Accessing global variable from function scope
    // requires this explicit statement
    global $amount_of_log_calls;

    // This change to the global variable is permanent
    $amount_of_log_calls += 1;

    echo $message;
}

// When in the global scope, regular global variables can be used
// without explicitly stating 'global $variable;'
echo $amount_of_log_calls; // 0

log_message("First log message!");
echo $amount_of_log_calls; // 1

log_message("Second log message!");
echo $amount_of_log_calls; // 2

Une seconde façon d'accéder aux variables de la portée globale consiste à utiliser le tableau spécial $ GLOBALS défini par PHP.

Le tableau $ GLOBALS est un tableau associatif avec le nom de la variable globale comme clé et le contenu de cette variable étant la valeur de l'élément tableau. Notez que $ GLOBALS existe dans n'importe quelle portée, c'est parce que $ GLOBALS est une superglobale.

Cela signifie que la fonction log_message() peut être réécrite comme log_message() :

function log_message($message) {
    // Access the global $amount_of_log_calls variable via the
    // $GLOBALS array. No need for 'global $GLOBALS;', since it
    // is a superglobal variable.
    $GLOBALS['amount_of_log_calls'] += 1;

    echo $messsage;
}

On peut se demander pourquoi utiliser le tableau $ GLOBALS lorsque le mot-clé global peut également être utilisé pour obtenir la valeur d'une variable globale. La raison principale est que le mot-clé global amènera la variable dans la portée. Vous ne pouvez pas ensuite réutiliser le même nom de variable dans la portée locale.