Maison  >  Article  >  développement back-end  >  Quelle est la différence entre l'utilisation de global et $GLOBALS[] en php ?

Quelle est la différence entre l'utilisation de global et $GLOBALS[] en php ?

伊谢尔伦
伊谢尔伦original
2017-06-21 17:34:032365parcourir

1 : Le rôle de Global 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 en include ou require.

<?php 
$a=123; 
function aa() 
{ 
Global $a; //如果不把$a定义为global变量,函数体内是不能访问函数体外部的$a的,但是可以定义一个相同的名字$a,此时这个变量是局部变量,等同于C语言的局部变量,只能在函数体内部使用。 
echo $a; 
} 
aa(); 
?>

Résumé : Les variables globales définies à l'intérieur du corps de la fonction peuvent être utilisées en dehors du corps de la fonction, mais les variables globales définies en dehors 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; //正确,可以使用

2 : Analyse globale du problème :
question : J'ai défini certaines variables ($a) dans config.inc.php, incluez ("config.inc.php") en dehors de la fonction dans d'autres fichiers, et à l'intérieur de la fonction Vous devez utiliser ces variables $a Si elle n'est pas déclarée, echo $a n'imprimera rien. Par conséquent, $a global est déclaré, mais il existe de nombreuses fonctions et de nombreuses variables. Vous ne pouvez pas le déclarer ainsi à plusieurs reprises, n'est-ce pas ? S'il existe une bonne solution, donnez-moi quelques conseils.
réponse1 : Définissez d'abord les constantes dans config.inc.php : définir (nom constant, valeur constante)
Ensuite, exigez 'config.inc.php' aux autres endroits où il doit être utilisé,
Ensuite vous pouvez Cette constante est utilisée directement dans ce fichier.
réponse2 : J'ai aussi un moyen, qui consiste à définir un tableau, tel que $x[a], $x, de sorte que vous n'ayez qu'à déclarer global $x.
réponse3 : J’ai essayé votre méthode, mais cela n’a pas fonctionné.
réponse4 : modifiez votre fichier php.ini.
3. Quelques exemples de tableaux Global et $GLOBALS
Exemple : Utilisation de global

<?php 
$w3sky = 1; 
$w3sky2 = 2; 
function Sum() 
{ 
global $w3sky, $w3sky2;$w3sky2 = $w3sky + $w3sky2; 
}Sum(); 
echo $w3sky2; 
?>

La sortie du script ci-dessus sera "3". Les variables globales $w3sky et $w3sky2 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. PHP n'a pas de limite sur le nombre maximum de variables globales qu'une fonction peut déclarer.
La deuxième façon d'accéder aux variables dans la portée globale consiste à utiliser un tableau $GLOBALS personnalisé PHP spécial. L'exemple précédent peut s'écrire :
L'exemple utilise $GLOBALS au lieu de global

<?PHP 
$w3sky = 1; 
$w3sky2 = 2;function Sum() 
{ 
$GLOBALS[&#39;w3sky&#39;] = $GLOBALS[&#39;w3sky&#39;] + $GLOBALS[&#39;w3sky2&#39;]; 
}Sum(); 
echo $w3sky2; 
?>

Dans le tableau $GLOBALS, chaque variable est un élément, et le nom de la clé correspond au nom de la variable et la valeur Le contenu de la variable correspondante. $GLOBALS existe dans la portée globale car $GLOBALS est une variable superglobale. L'exemple suivant montre l'utilisation de variables super globales :
L'exemple montre des exemples de variables super globales et de portée

<?PHP 
function test_global() 
{ 
// 大多数的
预定义变量
并不 "super",它们需要用 &#39;global&#39; 关键字来使它们在函数的本地区域中有效。 
global $HTTP_POST_VARS;echo $HTTP_POST_VARS[&#39;name&#39;];// Superglobals 在任何范围内都有效,它们并不需要 &#39;global&#39; 声明。Superglobals 是在 PHP 4.1.0 引入的。 
echo $_POST[&#39;name&#39;]; 
} 
?>

globale C'est-à-dire, dans un fichier, à condition de le déclarer comme global $db, puis dans la déclaration ci-dessous, vous pouvez référencer ce $db.
4. Au départ, je pensais que global et $GLOBALS étaient identiques, à l'exception des différentes méthodes d'écriture. Cependant, dans les applications pratiques, j'ai trouvé que la différence entre les deux est toujours très grande
Regardez l'exemple suivant ! d'abord :

<?php 
// 例子1 
function test_global() { 
global $var1, $var2; 
$var2 =& $var1; 
} 
function test_globals() { 
$GLOBALS[&#39;var3&#39;] =& $GLOBALS[&#39;var1&#39;]; 
} 
$var1 = 5; 
$var2 = $var3 = 0; 
test_global(); 
print $var2 ."\n"; 
test_globals(); 
print $var3 ."\n"; 
?>

Le résultat de l'exécution est :

0 
5

Comment est-ce possible, cela ne devrait-il pas être deux 5 ? Comment pourrait-il y avoir 1 0 et 1 5 ? ?
Hmm , nous gardons les questions ci-dessus et analysons les principes de $GLOBALS et global en profondeur
Nous savons tous que les variables sont en fait les "noms de code" de la mémoire physique correspondante dans le code ! alloué par les trois variables que nous avons déclarées ci-dessus est représenté par la figure suivante :
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.
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 !
Analysons ce que le monde a fait ?
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. Pourquoi dit-on cela ?

<?php 
// 例子2 
function test() { 
global $a; 
unset($a); 
} 
$a = 1; 
test(); 
print $a; 
?>
Le résultat de l'exécution est : 1

Pourquoi 1 est-il sorti ? $a n'a-t-il pas été désactivé ? Le désarmement a échoué ? Un bug PHP ?
Non, en fait, unset fonctionne. Cela désactive $a dans la fonction de test. Vous pouvez ajouter
print $a;
Copiez le code après la fonction à tester ! En d'autres termes, global génère la variable alias "$a" de $a en dehors de la fonction de test, et une fois test_globals exécuté, examinez les modifications apportées à la variable.
À ce stade, vous pouvez comprendre pourquoi, après l'exécution de l'exemple 1, $var2 vaut 0 et $var3 vaut 5 !
Nous arrivons donc à la conclusion que la différence entre global et $GLOBALS[] dans une fonction est la suivante :
global génère une variable alias dans la fonction qui pointe vers la variable externe de la fonction, au lieu de la véritable variable externe variable de la fonction. Une fois qu'elle change Sans l'adresse de pointage de la variable alias, des situations inattendues se produiront (pourquoi le résultat imprimé est-il 2 ? En fait, c'est parce que la référence de $var1 pointe vers l'adresse de référence de $var2. En conséquence, la valeur réelle n'a pas changé. Pour le moment, elle pointe simplement vers Le pointeur de $var1 pointe vers le pointeur de $var2, mais le pointeur du pointeur change légèrement, mais la valeur de $var2 ne change pas réellement à tout, donc la valeur de $var2 ne change toujours pas), par exemple, exemple 1.
$GLOBALS [] Il est vrai que l'appel est une variable externe, et elle sera toujours cohérente à l'intérieur et à l'extérieur de la fonction !


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn