Maison >développement back-end >tutoriel php >Quelques compréhensions différentes de global et $GLOBAL['']
Les variables globales en PHP doivent être déclarées comme globales lorsqu'elles sont utilisées dans des fonctions (le mot-clé Global n'est utile que lorsqu'elles sont définies dans des fonctions).
Global est utilisé pour définir des variables globales, mais cette variable globale ne s'applique pas à l'ensemble du site Web, mais à la page actuelle, y compris tous les fichiers inclus ou requis.
<?PHP $a=123; function aa() { Global $a; //如果不把$a定义为global变量,函数体内是不能访问函数体外部的$a的,但是可以定义一个相同的名字$a, //此时这个变量是局部变量,等同于C语言的局部变量,只能在函数体内部使用。 echo $a; } aa(); ?>
Les variables globales définies à l'intérieur du corps de la fonction peuvent être utilisées en dehors du corps de la fonction, tandis que les variables globales définies à l'extérieur du corps de la fonction ne peuvent pas être utilisées à l'intérieur du corps de la fonction.
$global $a; $a=123; function f() { echo $a; //错误, } //再看看下面一例 function f() { global $a; $a=123; } f(); echo $a; //正确,可以使用
Exemple de comparaison :
<?php $var1 = 1; function test(){ unset($GLOBALS['var1']); } test(); echo $var1; ?>
Parce que $var1 est supprimé, rien n'est imprimé.
<?php $var1 = 1; function test(){ global $var1; unset($var1); } test(); echo $var1; ?>
Imprimé accidentellement 1. Cela prouve que seule la référence d'alias est supprimée et que sa valeur n'est en aucun cas modifiée.
global $var est en fait &$GLOBALS['var'], qui est juste un alias pour appeler des variables externes.
$var1 et $GLOBALS['var1'] dans le code ci-dessus font référence à la même variable, pas à deux variables différentes.
Les variables globales de PHP sont un peu différentes du langage C. En langage C, les variables globales prennent automatiquement effet dans les fonctions à moins qu'elles ne soient couvertes par des variables locales. Cela peut poser des problèmes, car quelqu'un pourrait muter négligemment une variable globale. Les variables globales en PHP doivent être déclarées comme globales à l'aide de global lorsqu'elles sont utilisées dans des fonctions.
La fonction de la variable globale de PHP est de définir des variables globales, mais cette variable globale ne s'applique pas à l'ensemble du site Web, mais à la page actuelle, y compris tous les fichiers inclus ou requis.
Explication de $GLOBALS citée dans le manuel PHP :
Variable globale : $GLOBALS, Remarque : $GLOBALS est applicable dans PHP 3.0.0 et versions ultérieures versions .
Un tableau composé de toutes les variables globales définies. Le nom de la variable est l'index dans le tableau. Il s'agit d'une "superglobale", ou peut être décrite comme une variable globale automatique.
C'est-à-dire que $var1 et $GLOBALS['var1'] dans le code ci-dessus font référence à la même variable, pas à 2 variables différentes !
Si une référence est affectée à une variable déclarée globale à l'intérieur d'une fonction, la référence n'est visible qu'à l'intérieur de la fonction. Cela peut être évité en utilisant le tableau $GLOBALS.
Nous savons tous que les variables générées par les fonctions en PHP sont des variables privées de la fonction, donc les variables générées par le mot-clé global ne peuvent certainement pas échapper à cette règle global génère un alias dans la fonction qui pointe vers l'externe. variable de la fonction, plutôt que de vraies variables externes de la fonction. Une fois l'adresse de pointage de la variable alias modifiée, des situations inattendues se produiront en effet. $GLOBALS[] est en effet appelé une variable externe, et elle restera toujours cohérente. à l'intérieur et à l'extérieur de la fonction.
<?php $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; ?>
La sortie sera « 3 ». Les variables globales $a et $b sont déclarées dans la fonction et toutes les variables de référence de n'importe quelle variable pointeront vers les variables globales.
Pourquoi n'est-il pas 2 ? Cela n'a-t-il aucun effet en dehors de la fonction ? Veuillez noter que $b n'est pas modifié par référence dans la fonction, mais le $b modifié pointe vers la valeur de la mémoire physique, donc l'entrée externe est 3.
Nous arrivons donc à la conclusion que la différence entre global et $GLOBALS[] dans une fonction est :
global génère une variable alias dans la fonction qui pointe vers la variable externe de la fonction , pas la vraie fonction Pour les variables externes, une fois que l'adresse pointée par la variable alias est modifiée, des situations inattendues se produiront.
$GLOBALS[] est en effet appelé une variable externe, et elle sera toujours cohérente à l'intérieur et à l'extérieur de la fonction !