Heim  >  Artikel  >  Backend-Entwicklung  >  Über globale Variablen in PHP

Über globale Variablen in PHP

WBOY
WBOYOriginal
2016-10-22 00:14:261208Durchsuche

Hallo zusammen, ich habe den Unterschied zwischen dem superglobalen Array $_GLOBALS und der durch global definierten globalen Variablen aus dem Internet gelesen. Der Unterschied ist wie folgt:

  1. $GLOBALS['var'] ist die externe globale Variable selbst

  2. globale $var ist eine Referenz oder ein Zeiger auf die Variable mit demselben Namen wie die externe $var und keine echte Zuweisung

Also habe ich es versucht und der Code ist wie folgt:

<code><?php 
$var1 = 1; 
function test(){ 
    global $var1;                       //变量的引用
    unset($GLOBALS['var1']);            //销毁变量本身
    echo $var1;
} 

test(); 
?></code>

Nach Xiaobais Gedanken ist das so: Da es nicht gesetzt wurde ($GLOBALS['var1']);, wird die Variable selbst zerstört und der Verweis auf die Variable hat keine Bedeutung, sodass das Ergebnis nicht sein kann Ausgabe.

Aber ich habe es ausgeführt und das Ergebnis war 1, daher konnte ich es als Anfänger nicht verstehen. Ich möchte es mir im Voraus erklären.

Antwortinhalt:

Hallo zusammen, ich habe den Unterschied zwischen dem superglobalen Array $_GLOBALS und der durch global definierten globalen Variablen aus dem Internet gelesen. Der Unterschied ist wie folgt:

  1. $GLOBALS['var'] ist die externe globale Variable selbst

  2. globale $var ist eine Referenz oder ein Zeiger auf die Variable mit demselben Namen wie die externe $var und keine echte Zuweisung

Also habe ich es versucht und der Code ist wie folgt:

<code><?php 
$var1 = 1; 
function test(){ 
    global $var1;                       //变量的引用
    unset($GLOBALS['var1']);            //销毁变量本身
    echo $var1;
} 

test(); 
?></code>

Nach Xiaobais Gedanken ist das so: Da es nicht gesetzt wurde ($GLOBALS['var1']);, wird die Variable selbst zerstört und der Verweis auf die Variable hat keine Bedeutung, sodass das Ergebnis nicht sein kann Ausgabe.

Aber ich habe es ausgeführt und das Ergebnis war 1, daher konnte ich es als Anfänger nicht verstehen. Ich möchte es mir im Voraus erklären.

In PHP ist die darin enthaltene Funktion immer eine private Variable. Global generiert in der Funktion eine Aliasvariable, die auf die externe Variable der Funktion verweist, und nicht eine einfache Referenz oder einen Zeiger auf die externe Variable mit demselben Namen

Tatsächlich kann es einfach als das Problem des Adresszeigers der Variablen verstanden werden.

  1. $GLOBALS['var1'] ist derselbe Zeiger wie der externe $var1 und zeigt auf die Speicheradresse

  2. , wo der Wert 1 ist
  3. global $var1 ist ein Kopierzeiger des externen $val1-Zeigers und zeigt auch auf die Speicheradresse

  4. , wo der Wert 1 gespeichert ist.
  5. Egal $GLOBALS['var1'] oder global $var1, da die Wertspeicheradresse, auf die verwiesen wird, dieselbe ist, kann der Zweck der Änderung des Werts der externen Variablen erreicht werden.
    Also:

Die

unset($GLOBALS['var1'])-Operation zerstört auch die externe $var1
test-Funktion global $val1; unset($val1) und zerstört nicht die externe $var1
Schauen Sie sich den Code unten an, Sie werden es klarer wissen

<code><?php 
$var1 = 1; 
function test(){ 
    global $var1;
    unset($var1);                     
} 
test(); 
echo $var1;// 此处输出1</code>
<code><?php 
$var1 = 1; 
function test(){ 
    unset($GLOBALS['var1']);
} 
test(); 
echo $var1;// 此处报错PHP Notice:  Undefined variable: var1</code>

<code>global $var1;
</code>

ist ungefähr gleich

<code>$var1 = $GLOBALS['var1'];</code>
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