Detaillierte Erläuterung von Beispielen für global und $GLOBALS[] in PHP

零下一度
Freigeben: 2023-03-10 16:36:01
Original
1269 Leute haben es durchsucht

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 überschrieben werden.

Dies kann zu Problemen führen und einige Leute sind möglicherweise nachlässig. Ändern Sie eine globale Variable. Globale Variablen in PHP müssen global deklariert werden, wenn sie in einer Funktion verwendet werden (beachten Sie, dass das Schlüsselwort Global nur nützlich ist, wenn es in einer Funktion definiert ist).
1: Die Funktion 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() 
{
Nach dem Login kopieren


Global $a; //Wenn $a nicht als globale Variable definiert ist, kann der Funktionskörper nicht auf $a außerhalb des Funktionskörpers zugreifen, Sie können jedoch einen gleichen Namen $a definieren ,Zu diesem Zeitpunkt ist diese Variable eine lokale Variable, die der lokalen Variablen der C-Sprache entspricht und nur innerhalb des Funktionskörpers verwendet werden kann.

echo $a; 
} 
aa(); 
?>
Nach dem Login kopieren


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; //错误, 
}
Nach dem Login kopieren


//Schauen Sie sich das folgende Beispiel noch einmal an

function f() 
{ 
global $a; 
$a=123; 
} 
f();
Nach dem Login kopieren


echo $a; //Richtig, Sie können es verwenden


2 :Globale Problemanalyse:
Frage: Ich habe einige Variablen ($a) in config.inc.php definiert und („config.inc.php“) außerhalb der Funktion in andere Dateien eingefügt. Diese werden innerhalb der Funktion benötigt. Wenn sie nicht deklariert ist, 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 Konstanten in config.inc.php: Definieren Sie (Konstantennamen, Konstantenwert)
Fordern Sie dann „config.inc.php“ an anderen Stellen an, an denen es verwendet werden muss,
Dann Sie can Diese Konstante wird direkt in dieser Datei verwendet.
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; 
?>
Nach dem Login kopieren


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[&#39;w3sky&#39;] = $GLOBALS[&#39;w3sky&#39;] + $GLOBALS[&#39;w3sky2&#39;]; 
}Sum(); 
echo $w3sky2; 
?>
Nach dem Login kopieren


Im $GLOBALS-Array ist jede Variable ein Element, der Schlüsselname entspricht der Variablen Name, und der Wert entspricht dem Inhalt der Variablen. $GLOBALS existiert im globalen Bereich, da $GLOBALS eine superglobale Variable ist. Das folgende Beispiel zeigt die Verwendung superglobaler Variablen:
Beispiel, das Beispiele für superglobale Variablen und den Gültigkeitsbereich zeigt

<?PHP function test_global() { // 大多数的预定义变量并不 "super",它们需要用 &#39;global&#39; 关键字来使它们在函数的本地区域中有效。 global $HTTP_POST_VARS;echo $HTTP_POST_VARS[&#39;name&#39;];// Superglobals 在任何范围内都有效,它们并不需要 &#39;global&#39; 声明。Superglobals 是在 PHP 4.1.0 引入的。 echo $_POST[&#39;name&#39;]; } ?>
Nach dem Login kopieren

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 Zuerst:

<?php 
// 例子1 
function test_global() { 
global $var1, $var2; 
$var2 =& $var1; 
} 
function test_globals() { 
$GLOBALS[&#39;var3&#39;] =& $GLOBALS[&#39;var1&#39;]; 
} 
$var1 = 5; 
$var2 = $var3 = 0; 
test_global(); 
print $var2 ."\n"; 
test_globals(); 
print $var3 ."\n"; 
?>
Nach dem Login kopieren

Code kopieren
Das Ausführungsergebnis ist:
0
5
Wie kann das nicht passieren? Wie kommt es? Es gibt 1 0 und 1. Was ist mit 5? Speicher im Code. Nehmen Sie die 3 Variablen an, die wir oben deklariert haben. Der zugewiesene Speicher ist in der folgenden Abbildung dargestellt:
Zitieren der Erklärung von $GLOBALS im PHP-Handbuch:
Globale Variable: $GLOBALS
Hinweis: $ GLOBALS ist in PHP 3.0.0 und späteren Versionen anwendbar.
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 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; ?>
Nach dem Login kopieren

执行结果为: 

为什么会输出1呢?不是已经把$a给unset了吗?unset失灵了?php的bug? 
都不是,其实unset起作用了,是把test函数中的$a给unset掉了,可以在函数后面加入 
print $a; 
复制代码 
来测试!也就是说global产生了test函数外部$a的别名变量“$a”,为了和外面的$a区别,我把它成为--test->$a,那么例子1也这么命名的话,可得出下面的图: 
而test_globals执行过以后,看变量的变化: 
此时,看图,就能理解为什么例子1执行完以后,$var2是0,而$var3是5了! 
所以我们得出一个结论,在函数中global和$GLOBALS[]的区别在于: 
global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量,一但改变了别名变量的指向地址,就会发生一些意料不到情况(为什么会打印结果为2呢?其实就是因为$var1的引用指向了$var2的引用地址。导致实质的值没有改变。这时候只是指向$var1的指针指向了$var2的指针,只是指针指向变了一下,但是实质上根本就没有改变$var2的值,因此$var2的值仍旧不会变化),例如例子1. 
$GLOBALS[]确确实实调用是外部的变量,函数内外会始终保持一致! 
注:(接着回到上面的例子1,看test_global中的这一代码“$var2 =& $var1;”,上面是一个引用赋值运算,也就是$var2将指向var1所指向的物理内存地址,所以例子1执行过test_global函数以后,变量的变化只在函数的局部产生效应,在函数外部$var2的指向物理内存地址并没有变化,还是它自己.(重点) 
接着回到上面的例子1,看test_global中的这一代码“$var2 =& $var1;”,上面是一个引用赋值运算,也就是$var2将指向var1所指向的物理内存地址,所以例子1执行过test_global函数以后,变量的变化由下图可以看出) 

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für global und $GLOBALS[] in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!