Heim >Backend-Entwicklung >PHP-Tutorial >global und $GLOBALS[ in PHP

global und $GLOBALS[ in PHP

墨辰丷
墨辰丷Original
2018-05-15 17:07:294922Durchsuche

Dieser Artikel stellt hauptsächlich den Unterschied zwischen global und $GLOBALS[' '] in PHP vor. Ich hoffe, dass er für alle hilfreich ist.

Ich dachte immer, dass es keinen Unterschied zwischen global und $GLOBALS[' '] in PHP gibt. Ich habe es heute überprüft und festgestellt, dass es einen großen Unterschied zwischen den beiden gibt:
global $var: Es ist ein Verweis auf die globale Variable $var; $GLOBALS[„var“]: Es ist die globale Variable $var selbst, die äquivalent zu $var ist :
Beispiel 1:

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

test()-Funktion $GLOBALS['var2'] entspricht der globalen Variablen $var1,

$GLOBALS['var2'] = $GLOBALS['var1 '] Funktionen zum Ändern von $var2 ist ein Verweis auf $var1, das heißt, $var2 ist ein Alias ​​von $var1 und beide zeigen auf denselben Speicherplatz, sodass der Wert von $var2 1 wird.


Beispiel 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...
?>

In der Testfunktion sind $var1 und $var2 Referenzen (d. h. Aliase) der globalen Variablen $var1 bzw. $var2

$var2 = &$var1 ; //Der Wert von $var2 (lokale Variable) in der Testfunktion wird in die Referenz von $var1 in der Funktion geändert

Zu diesem Zeitpunkt ist der Wert von $var2 in der Testfunktion gleich dem Wert von $ var1 in der Funktion, der auch dem Wert in der globalen Variablen entspricht. Der Wert von $var1 zeigt alle drei auf denselben Speicherplatz. Wenn sich der Wert von $var2 in der Testfunktion ändert, ändern sich die Werte der anderen zwei ($var1 in der Testfunktion und $var1 in der globalen Variablen) ändern sich ebenfalls.

Beispiel 3.

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

Wie oben erwähnt, ist $GLOBALS['var1'] äquivalent zu $var1 in globalen Variablen, unset($GLOBALS['var1' ] ); ist äquivalent zu Die globale Variable $var1 wird zerstört, sodass sie leer gedruckt wird.

Ergänzung:

Die Funktion unset() in PHP wird verwendet, um Variablen zu zerstören. In vielen Fällen wird nur die Variable zerstört, der Wert jedoch nicht im Speicher zerstört (das heißt, die Funktion unset() unterbricht die Beziehung zwischen der Variablen und dem Speicher exponentiell, zerstört den Variablennamen, der Wert im Speicher wird nicht zerstört und der Speicher wird nicht freigegeben.) Was zu beachten ist :
1. Diese Funktion gibt den Speicher nur dann frei, wenn der von der Variablen belegte Speicher 256 Bytes überschreitet.
2. Die Adresse wird nur freigegeben, wenn alle Variablen, die auf den Speicher verweisen, auf den die Variable verweist (z. B. alle Verweise auf die Variable), zerstört werden.

Beispiel 4.

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

In diesem Code ist die mit global in der Funktion test() definierte Variable eigentlich nur ein Verweis auf die globale Variable $var, die im Test zerstört wird( ) Funktion Diese Variable entspricht der Zerstörung eines Verweises auf die globale Variable (ein Teil des Speichers hat zwei Namen. Das Löschen eines der Namen hat keine Auswirkungen auf den anderen Namen und den Wert des Speichers, wenn die globale Variable $ gedruckt wird). var, das Ergebnis ist immer noch 1. Dieser Code führt ähnliche Operationen wie der folgende Code aus:

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

Schauen wir uns ein weiteres Beispiel für die Referenzierung globaler Variablen innerhalb einer Funktion an:

<?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的值
?>

    Da die Parameter falsch sind, also Die Anweisung in if wird ausgeführt und der in der Funktion global_references() deklarierte Wert von var2, der ursprünglich ein Verweis auf die globale Variable var2 war, wird zu einem Verweis auf var1, sodass die beiden in der Funktion global_references() gedruckten Variablen gedruckt werden beide der globalen Variablen var1.
  1. 1 Die ausgeführte Anweisung hat keinen Einfluss auf den Wert der globalen Variablen, sodass der zu Beginn des Programms deklarierte Wert gedruckt wird.
  2. Da der Parameter wahr ist, wird die Anweisung in else ausgeführt, um den Wert der globalen Variablen var1 in die Referenz der globalen Variablen var1 zu ändern (var1 in der Funktion global_references() deklariert). Dadurch wird der in global_references() deklarierte Wert von var2 nicht geändert (es handelt sich immer noch um einen Verweis auf den ursprünglichen Speicher).
  3. Nach 3 ist die globale Variable var2 zu einer Referenz auf die globale Variable var1 geworden, sodass die Werte der beiden globalen Variablen zu diesem Zeitpunkt gleich sind.
  4. Zusammenfassung:
global $var: ist eine Referenz auf die globale Variable $var;

$GLOBALS["var"]: ist die globale Variable $var selbst, Das ist Äquivalent zu $var.
Wenn Ersteres eine innerhalb einer Funktion deklarierte Variable ist, ist ihr Gültigkeitsbereich nur innerhalb der Funktion sichtbar. Diese Variable ist eine Referenz auf eine globale Variable Die Variable hat keinen Einfluss auf die Funktion. Die globale Variable, auf die sie verweist, hat Auswirkungen.

Verwandte Empfehlungen:


PHP liest externe Variable $GLOBALS

Fehlerursache in PHP json_encode($GLOBALS)

const und global in PHP

Das obige ist der detaillierte Inhalt vonglobal und $GLOBALS[ in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn