Heim  >  Artikel  >  Backend-Entwicklung  >  Einige unterschiedliche Verständnisse von global und $GLOBAL['']

Einige unterschiedliche Verständnisse von global und $GLOBAL['']

伊谢尔伦
伊谢尔伦Original
2017-01-16 14:55:201970Durchsuche

Globale Variablen in PHP müssen als global deklariert werden, wenn sie in Funktionen verwendet werden (das Schlüsselwort Global ist nur nützlich, wenn es in Funktionen definiert ist).

Global wird zum Definieren globaler Variablen verwendet. Diese globale Variable gilt jedoch nicht für die gesamte Website, sondern für die aktuelle Seite, einschließlich aller Dateien in include oder require.

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

Globale Variablen, die innerhalb des Funktionskörpers definiert sind, können außerhalb des Funktionskörpers verwendet werden, während globale Variablen, die außerhalb des Funktionskörpers definiert sind, nicht innerhalb des Funktionskörpers verwendet werden können.

$global $a; 
$a=123; 
function f() 
{ 
echo $a; //错误, 
} 
//再看看下面一例 
function f() 
{ 
global $a; 
$a=123; 
} 
f(); 
echo $a; //正确,可以使用

Beispielvergleich:

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

Da $var1 gelöscht ist, wird nichts gedruckt.

<?php 
$var1 = 1; 
function test(){ 
global $var1; 
unset($var1); 
} 
test(); 
echo $var1; 
?>

Versehentlich gedruckt 1. Es beweist, dass nur die Alias-Referenz gelöscht wurde und ihr Wert in keiner Weise geändert wurde.

global $var ist eigentlich &$GLOBALS['var'], was nur ein Alias ​​für den Aufruf externer Variablen ist.
$var1 und $GLOBALS['var1'] im obigen Code beziehen sich auf dieselbe Variable, nicht auf zwei verschiedene Variablen.
Die globalen Variablen von PHP unterscheiden sich ein wenig von der C-Sprache. In der C-Sprache werden globale Variablen automatisch in Funktionen wirksam, sofern sie nicht durch lokale Variablen abgedeckt werden. Dies kann zu Problemen führen, da jemand unachtsam eine globale Variable mutieren könnte. Globale Variablen in PHP müssen bei Verwendung in Funktionen mit global als global deklariert werden.
Die Funktion der globalen Variablen von PHP besteht darin, globale Variablen zu definieren. Diese globale Variable gilt jedoch nicht für die gesamte Website, sondern für die aktuelle Seite, einschließlich aller Dateien in include oder require.

Zitieren der Erklärung von $GLOBALS im PHP-Handbuch:

Globale Variable: $GLOBALS, Hinweis: $GLOBALS gilt in PHP 3.0.0 und spätere Versionen.

Ein Array bestehend aus allen definierten globalen Variablen. Der Variablenname ist der Index im Array. Dies ist eine „superglobale“ oder kann als automatische globale Variable beschrieben werden.

Das heißt, $var1 und $GLOBALS['var1'] im obigen Code beziehen sich auf dieselbe Variable, nicht auf zwei verschiedene Variablen!

Wenn eine Referenz einer als global deklarierten Variablen innerhalb einer Funktion zugewiesen wird, ist die Referenz nur innerhalb der Funktion sichtbar. Dies kann durch die Verwendung des Arrays $GLOBALS vermieden werden.

Wir alle wissen, dass die von Funktionen in PHP generierten Variablen private Variablen der Funktion sind, sodass die vom Schlüsselwort global generierten Variablen dieser Regel sicherlich nicht entgehen können. global generiert einen Alias ​​in der Funktion, der auf die externe Funktion verweist Variable der Funktion. Variablen anstelle realer Variablen außerhalb der Funktion. Sobald die Zeigeradresse der Alias-Variable geändert wird, treten tatsächlich einige unerwartete Situationen auf, die als externe Variable bezeichnet werden, und sie bleibt immer konsistent innerhalb und außerhalb der Funktion.

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

Die Ausgabe ist „3“. In der Funktion werden die globalen Variablen $a und $b deklariert, und alle Referenzvariablen einer beliebigen Variablen verweisen auf die globalen Variablen.

Warum ist es nicht 2? Hat es keine Auswirkung außerhalb der Funktion? Bitte beachten Sie, dass $b nicht durch Referenz in der Funktion geändert wird, sondern dass das geänderte $b auf den Wert des physischen Speichers verweist. Der externe Eingang ist also 3.

Wir kommen also zu dem Schluss, dass der Unterschied zwischen global und $GLOBALS[] in einer Funktion folgender ist:

global generiert eine Alias-Variable in der Funktion, die auf die externe Variable der Funktion zeigt , nicht die eigentliche Funktion. Bei externen Variablen treten einige unerwartete Situationen auf, sobald die Adresse geändert wird, auf die die Alias-Variable zeigt.

$GLOBALS[] wird tatsächlich eine externe Variable genannt und ist innerhalb und außerhalb der Funktion immer konsistent!

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