Heim >Backend-Entwicklung >PHP-Tutorial >Was ist der Unterschied zwischen global und $GLOBALS[] in PHP?
1: Die Rolle von Global 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.
<?php $a=123; function aa() { Global $a; //如果不把$a定义为global变量,函数体内是不能访问函数体外部的$a的,但是可以定义一个相同的名字$a,此时这个变量是局部变量,等同于C语言的局部变量,只能在函数体内部使用。 echo $a; } aa(); ?>
Zusammenfassung: Globale Variablen, die innerhalb des Funktionskörpers definiert sind, können außerhalb des Funktionskörpers verwendet werden, globale Variablen, die außerhalb des Funktionskörpers definiert sind, können nicht innerhalb des Funktionskörpers verwendet werden,
$global $a; $a=123; function f() { echo $a; //错误, } //再看看下面一例 function f() { global $a; $a=123; } f(); echo $a; //正确,可以使用
2: Globale Problemanalyse:
Frage: Ich habe einige Variablen ($a) in config.inc.php definiert, („config.inc.php“) außerhalb der Funktion in andere Dateien eingebunden und Innerhalb der Funktion müssen Sie diese Variablen verwenden: $a. Wenn sie nicht deklariert sind, gibt echo $a nichts aus. Daher wird global $a deklariert, aber es gibt viele Funktionen und viele Variablen. Sie können es nicht wiederholt auf diese Weise deklarieren, oder? Wenn es eine gute Lösung gibt, geben Sie mir bitte einen Rat.
Antwort1: Definieren Sie zuerst die Konstanten in config.inc.php: define(constant name, constant value)
Dann erfordern Sie 'config.inc.php' an anderen Stellen, an denen es verwendet werden muss,
Dann Sie können diese Konstante direkt in dieser Datei verwenden.
Antwort2: Ich habe auch eine Möglichkeit, ein Array wie $x[a], $x zu definieren, sodass Sie nur globales $x deklarieren müssen.
Antwort3: Ich habe Ihre Methode ausprobiert und sie hat nicht funktioniert.
Antwort4: Ändern Sie Ihre php.ini-Datei.
3. Einige Beispiele für globale und $GLOBALS-Arrays
Beispiel: Verwendung von global
<?php $w3sky = 1; $w3sky2 = 2; function Sum() { global $w3sky, $w3sky2;$w3sky2 = $w3sky + $w3sky2; }Sum(); echo $w3sky2; ?>
Die Ausgabe des obigen Skripts ist „3“. Die globalen Variablen $w3sky und $w3sky2 werden in der Funktion deklariert und alle Referenzvariablen jeder Variablen verweisen auf die globalen Variablen. PHP hat keine Begrenzung hinsichtlich der maximalen Anzahl globaler Variablen, die eine Funktion deklarieren kann.
Die zweite Möglichkeit, auf Variablen im globalen Bereich zuzugreifen, ist die Verwendung eines speziellen PHP-benutzerdefinierten $GLOBALS-Arrays. Das vorherige Beispiel kann wie folgt geschrieben werden:
Das Beispiel verwendet $GLOBALS anstelle von global
<?PHP $w3sky = 1; $w3sky2 = 2;function Sum() { $GLOBALS['w3sky'] = $GLOBALS['w3sky'] + $GLOBALS['w3sky2']; }Sum(); echo $w3sky2; ?>
Im $GLOBALS-Array ist jede Variable ein Element und der Schlüsselname entspricht dem Variablenname und der Wert Der Inhalt der entsprechenden Variablen. $GLOBALS existiert im globalen Bereich, da $GLOBALS eine superglobale Variable ist. Das folgende Beispiel zeigt die Verwendung von superglobalen Variablen:
Beispiel zeigt Beispiele für superglobale Variablen und den Gültigkeitsbereich
<?PHP function test_global() { // 大多数的 预定义变量 并不 "super",它们需要用 'global' 关键字来使它们在函数的本地区域中有效。 global $HTTP_POST_VARS;echo $HTTP_POST_VARS['name'];// Superglobals 在任何范围内都有效,它们并不需要 'global' 声明。Superglobals 是在 PHP 4.1.0 引入的。 echo $_POST['name']; } ?>
global Das heißt, in einer Datei, solange Sie sie als global deklarieren $db, dann können Sie in der Deklaration unten auf diese $db verweisen.
4. Ich dachte ursprünglich, dass Global und $GLOBALS bis auf die unterschiedlichen Schreibmethoden gleich seien. In der Praxis habe ich jedoch festgestellt, dass der Unterschied zwischen den beiden immer noch sehr groß ist Erstens:
<?php // 例子1 function test_global() { global $var1, $var2; $var2 =& $var1; } function test_globals() { $GLOBALS['var3'] =& $GLOBALS['var1']; } $var1 = 5; $var2 = $var3 = 0; test_global(); print $var2 ."\n"; test_globals(); print $var3 ."\n"; ?>Das Ausführungsergebnis ist:
0 5Wie könnte das nicht zwei 5er sein? Wie könnte es 1 0 und 1 5 sein? ?
Hmm, wir behalten die oben genannten Fragen bei und analysieren die Prinzipien von $GLOBALS und global
Wir alle wissen, dass Variablen tatsächlich die „Codenamen“ des entsprechenden physischen Speichers sind Die durch die drei oben deklarierten Variablen zugewiesene Variable wird durch die folgende Abbildung dargestellt:
Erklärung von $GLOBALS zitiert aus dem
PHP-Handbuch : Globale Variable: $GLOBALS
Hinweis: $GLOBALS ist anwendbar in PHP 3.0.0 und späteren 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!
Lassen Sie uns analysieren, was genau Global getan hat?
Wir alle wissen, dass die von Funktionen in PHP generierten Variablen private Variablen der Funktion sind, daher können die vom globalen Schlüsselwort generierten Variablen dieser Regel sicherlich nicht entkommen. Schauen Sie sich den folgenden Code an:
<?php // 例子2 function test() { global $a; unset($a); } $a = 1; test(); print $a; ?>Das Ausführungsergebnis ist: 1
Warum wird 1 ausgegeben? Wurde $a nicht deaktiviert? Unscharf fehlgeschlagen? PHP-Fehler?
Nein, tatsächlich funktioniert es. Es deaktiviert $a in der Testfunktion. Sie können
print $a; kopieren. Mit anderen Worten, global generiert die Alias-Variable „$a“ von $a außerhalb der Testfunktion. Sehen Sie sich nach der Ausführung von test_globals die Änderungen in der Variablen an.
An diesem Punkt können Sie verstehen, warum nach der Ausführung von Beispiel 1 $var2 0 und $var3 5 ist!
Daher kommen wir 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, statt auf die tatsächliche externe Variable der Funktion. Sobald sie sich ändert. Ohne die Verweisadresse der Aliasvariablen treten einige unerwartete Situationen auf (warum ist das gedruckte Ergebnis 2? Tatsächlich liegt dies daran, dass die Referenz von $var1 auf die Referenzadresse von $var2 verweist. Infolgedessen hat sich der tatsächliche Wert zu diesem Zeitpunkt nicht geändert. Der Zeiger von $ var1 zeigt auf den Zeiger von $ var2, der Zeiger ändert sich jedoch geringfügig, der Wert von $ var2 ändert sich jedoch nicht alle, sodass sich der Wert von $var2 immer noch nicht ändert), zum Beispiel Beispiel 1.
$GLOBALS [] Es stimmt, dass der Aufruf eine externe Variable ist und die Funktion innen und außen immer konsistent ist!
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen global und $GLOBALS[] in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!