Maison  >  Article  >  développement back-end  >  global et $GLOBALS[ en php

global et $GLOBALS[ en php

墨辰丷
墨辰丷original
2018-05-15 17:07:294823parcourir

Cet article présente principalement la différence entre global et $GLOBALS[' '] en php. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

J'ai toujours pensé qu'il n'y avait pas de différence entre global et $GLOBALS[' '] en php. Je l'ai vérifié aujourd'hui et j'ai découvert qu'il y avait une grande différence entre les deux. J'ai fait le résumé suivant :
. global $var : C'est une référence à la variable globale $var ;
$GLOBALS[“var”] : C'est la variable globale $var elle-même, qui est équivalente à $var
Voici quelques exemples. :
Exemple 1 :

<?php
    $var1 = 1;    
    $var2 = 2;    
    function test() {
        $GLOBALS[&#39;var2&#39;] = &$GLOBALS[&#39;var1&#39;];
    }
    test();   
    echo $var2;//输出1
?>

$GLOBALS['var2'] dans la fonction test() est équivalent à la variable globale $var1,
$GLOBALS['var2'] = $ Les fonctions GLOBALS['var1'] pour changer $ var2 deviennent une référence à $var1, c'est-à-dire que $var2 est un alias de $var1, et les deux pointent vers le même espace mémoire, donc la valeur de $var2 devient 1.

Exemple 2 :

<?php
    $var1 = 1;    
    $var2 = 2;    
    function test(){
        global $var1, $var2;        
        $var2 = &$var1;        
        echo $var2;        
        $var2 = &#39;hello...&#39;;
    }
    test(); // 输出 1
    echo $var2; // 输出 2
    echo $var1; // 输出 hello...
?>

Dans la fonction de test $var1 et $var2 sont des références (c'est-à-dire des alias) de variables globales $var1 et $var2 respectivement
$var2 = &$ var1; //La valeur de $var2 (variable locale) dans la fonction de test est remplacée par la référence de $var1 dans la fonction
À ce moment, la valeur de $var2 dans la fonction de test est égale à la valeur de $var1 dans la fonction, qui est également égale à la valeur globale. La valeur de $var1 dans la variable pointe vers le même espace mémoire. Lorsque la valeur de $var2 dans la fonction de test change, les valeurs des deux autres. ($var1 dans la fonction de test et $var1 dans la variable globale) changent également.

Exemple 3.

<?php
    $var1 = 1;    
    function test(){
        unset($GLOBALS[&#39;var1&#39;]);
    }
    test();    
    echo $var1;
?>

Comme mentionné ci-dessus, $GLOBALS['var1'] est équivalent à $var1 dans les variables globales, unset($GLOBALS[' var1'] ); équivalent à détruire la variable globale $var1, donc l'impression est vide
Supplémentaire :
La fonction unset() en php est utilisée pour détruire les variables. Dans de nombreux cas, elle détruit simplement la variable, mais la valeur en mémoire. n'est pas détruit (c'est-à-dire que la fonction unset() coupe de manière exponentielle la relation entre la variable et la mémoire, détruit le nom de la variable, la valeur dans la mémoire n'est pas détruite et la mémoire n'est pas libérée). noté est :
1. Cette fonction ne libérera la mémoire que lorsque la mémoire occupée par la variable dépasse 256 octets.
2. L'adresse ne sera libérée que lorsque toutes les variables pointant vers la mémoire pointée par la variable (telles que toutes les références à la variable) seront détruites.

Exemple 4.

<?php
    $var1 = 1;    
    function test(){
        global $var1;        
        unset($var1);
    }
    test(); 
    echo $var1; //结果为打印1
?>

Dans ce code, la variable définie à l'aide de global dans la fonction test() n'est en fait qu'une référence à la variable globale $var dans test(). fonction Détruire la variable dans équivaut à détruire une référence à la variable globale (un morceau de mémoire a deux noms, supprimer l'un des noms n'affectera pas l'autre nom et la valeur de la mémoire), donc lors de l'impression Lorsque la variable globale $ var est utilisé, le résultat est toujours 1. Ce code est similaire au code suivant :

<?php
    $var = 1;    
    $var1 = &$var;    
    unset($var1);    
    echo $var;
?>

Regardez un autre exemple de référencement de variables globales à l'intérieur d'une fonction :

<?php
    $var1 = "我是变量var1的值";    
    $var2 = "我是变量var2的值";    
    function global_references($use_globals) {
        global $var1, $var2;        
        if (!$use_globals) {            
        $var2 = &$var1;            
        echo $var1;            
        echo $var2;            
        echo "<br />";
        } else {            
        $GLOBALS["var2"] = &$var1;            
        echo $var1;            
        echo $var2;            
        echo "<br />";
        }
    }
    global_references(false);
    //1.打印:我是变量var1的值我是变量var1的值
    echo $var1;    
    echo $var2;    
    echo "<br />"; 
    //2.打印:我是变量var1的值我是变量var2的值

    global_references(true); 
    //3.打印:我是变量var1的值我是变量var2的值
    echo $var1;    
    echo $var2;    
    echo "<br />"; 
    //4.打印:我是变量var1的值我是变量var1的值
?>
  1. Parce que le paramètre est faux , l'instruction dans if est exécutée et la valeur de var2 déclarée dans la fonction global_references(), qui était à l'origine une référence à la variable globale var2, devient une référence à var1, donc les deux variables imprimées dans la fonction global_references() are Une référence à la variable globale var1.

  2. 1 L'instruction exécutée n'affecte pas la valeur de la variable globale, donc la valeur déclarée au début du programme est imprimée.

  3. Parce que le paramètre est vrai, l'instruction dans else est exécutée pour changer la valeur de la variable globale var1 en référence de la variable globale var1 (var1 déclarée dans la fonction global_references()). Cela ne change pas la valeur de var2 déclarée dans global_references() (c'est toujours une référence à la mémoire d'origine).

  4. Après 3, la variable globale var2 est devenue une référence à la variable globale var1, donc les valeurs des deux variables globales sont les mêmes à ce moment.

Résumé :
global $var : est une référence à la variable globale $var
$GLOBALS["var"] : est la variable globale $var elle-même, c'est équivalent à $var.
Si la première est une variable déclarée dans une fonction, sa portée est la fonction, c'est-à-dire qu'elle n'est visible que dans la fonction. Cette variable est une référence à une variable globale. La variable n'affectera pas la fonction. La variable globale vers laquelle elle pointe a un impact.

Recommandations associées :

PHP lit la variable externe $GLOBALS

Cause de l'erreur dans PHP json_encode($GLOBALS)

const et global en php

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
Article précédent:Exemple simple de php sphinxArticle suivant:Exemple simple de php sphinx