Ich lerne PHP aus w3schools PHP Tutorial .
Beim Lernen von PHP stieß ich auf das Konzept der vordefinierten globalen Variablen, d. h. Superglobals.
In einer Neugier, um "Superglobals" tiefer zu verstehen, schrieb ich den folgenden Code und führte ihn in einem Browser auf meinem lokalen Rechner (d. h. localhost) aus:
%Vor%Ich habe folgende Ausgabe in einem Browser:
%Vor%Die obige Ausgabe hat in meinen Gedanken viele Zweifel hervorgerufen:
$GLOBALS,
$_SERVER, $_REQUEST, $_POST, $_GET, $_FILES, $_ENV, $_COOKIE
und
$_SESSION
Dann ist mein Zweifel, was die Array-Elemente aus dem vordefinierten globalen Array tun
$GLOBALS
viz. [_GET], [_POST], [_COOKIE], [_FILES]
bedeuten, wie sie haben
ihre eigene unabhängige Existenz als Superglobale? [toWorkNormally] => 1
von der obigen Array-Ausgabe gemeint? [GLOBALS]
und wie wird gedruckt?
diese Elemente? $GLOBALS
array darin besteht, Variablen zu speichern, die vom Benutzer global deklariert wurden, wie wurde dieses Array vorher mit einigen anderen Werten gefüllt, da ich in meinem Code keine globale Variable deklariert habe? Hinweis: Ich verwende das Betriebssystem "Microsoft Windows 10 Home Single Language" auf meinem Computer. Es ist ein 64-bit Betriebssystem. Ich verwende die neueste Version von XAMPP mit PHP 7.0.13 und HTTP Apache Webserver v.2.4.23 , um das Programm lokal auszuführen. Beachten Sie außerdem, dass ich in meinem Code keine andere Variable als global oder lokal definiert habe.
Aus meinen PHP-Kenntnissen und einigen Recherchen sowie dem Testen auf mehreren Betriebssystemen mit verschiedenen PHP-Versionen habe ich folgendes gefunden:
Frage 1 & amp; 3:
Ja, Sie sind in Bezug auf die 9 Superglobals korrekt, aber eine sehr wichtige Sache, die Sie im Auge behalten sollten, ist, dass $ GLOBALS - Referenzen alle im globalen Bereich verfügbaren Variablen.
Interessanterweise beachten Sie, dass $ GLOBALS der einzige Superglobal ist, der nicht mit einem Unterstrich beginnt.
Da $ GLOBALS Verweise auf alle anderen Superglobals enthält, schließt sich bei uns print_r ($ GLOBALS) auch die anderen Superglobals in der Ausgabe ein. Weil $ GLOBALS sich auch selbst referenziert, erhalten wir die RECURSION, die Sie in Ihrem 3. Punkt gefragt haben. Sie können es sich als ein unendliches dimensionales Array vorstellen, das $ GLOBALS enthält. Fast die gleiche Idee wie eine unendliche Schleife.
%Vor%Stattdessen sieht das Skript dies und beendet die Ausführung und druckt RECURSION. Jetzt habe ich es in 3 verschiedenen Umgebungen getestet und jedes Mal, wenn die Reihenfolge, in der die Superglobale gedruckt werden, geändert wurde, aber sobald es $ GLOBALS erreicht, stoppt es und druckt RECURSION.
Frage 2:
Ich konnte keine Informationen zu $_COOKIE[toWorkNormally] => 1
finden. Ich gehe davon aus, dass dies irgendwo anders festgelegt ist. Ich habe es in keinem meiner Tests gesehen.
Frage 4:
Das ist weder richtig noch falsch. Der Zweck von $ GLOBALS ist nicht , um alle Variablen zu speichern, die vom Benutzer global erstellt wurden. Es verweist lediglich auf alle Variablen, die im globalen Bereich verfügbar sind, einschließlich der Superglobale. Deshalb sehen Sie alle anderen Superglobale in der Ausgabe. Viele Entwickler gehen jedoch davon aus, dass die benutzerdefinierten globalen Variablen in $ GLOBALS gespeichert sind.
Beschreibung im PHP.net-Handbuch
Ein assoziatives Array, das Verweise auf alle Variablen enthält, die derzeit im globalen Umfang des Skripts definiert. Die Variable Namen sind die Schlüssel des Arrays.
Um alle Superglobals anzuzeigen, müssen Sie print_r()
einzeln einzeln eingeben.
Um alle benutzerdefinierten globalen Variablen zu überprüfen, können Sie array_keys($GLOBALS)
verwenden. Alle Elemente, die keine Superglobale sind, sind höchstwahrscheinlich benutzerdefinierte globale Variablen.
BEARBEITEN als Reaktion auf Benutzerkommentare
Als Antwort auf Ihren ersten Kommentar: Nein, sie sind nicht anders. Die nicht gedruckten Superglobals sind immer noch Teil des Arrays, aber die Ausführung / Ausgabe stoppt, da sie die RECURSION bei Erreichen von $ GLOBALS erreicht. Die Superglobals werden in zufälliger Reihenfolge gedruckt, und was auch immer kommt, nachdem die $ GLOBALS nicht gesehen werden, da sie eine RECURSION bei $ GLOBALS erkennt und die Ausgabe stoppt.
Sie können alle Superglobals / globalen Variablen überprüfen, indem Sie print_r(array_keys($GLOBALS));
mit Ausnahme von $ _SESSION verwenden, da eine Sitzung noch nicht gestartet wurde. print_r($_SESSION)
gibt dir einen undefined variable $_SESSION
Hinweis. Sie können $ _SESSION sehen, wenn Sie session_start();
unmittelbar vor dem Drucken eingeben.
Referenzen in PHP sind ein Mittel, um auf denselben variablen Inhalt unter verschiedenen Namen zuzugreifen.
Beachten Sie, dass Variablenname und Variableninhalt in PHP unterschiedlich sind, sodass derselbe Inhalt andere Namen haben kann
$GLOBALS
ist das globale aller super globalen und benutzerdefinierten Variablen. Wenn Sie zum Beispiel die Variable $a = 10;
in Ihrem $GLOBALS
-Array deklariert haben, haben Sie ein key = & gt; -Wertpaar, wobei key ein Wert ist und value 10.Wenn Sie etwas von $GLOBALS
bekommen wollen, müssen Sie es einfach schreiben als Array-Schlüssel.
Beispiel
%Vor% Im obigen Beispiel ist output der Wert von $a
also 25;
In Ihrem Beispiel toWorkNormally=>1
bedeutet das, dass Sie Cookie mit Name auf WorkNormally und mit Wert 1 oder True
Auch wenn Sie das Formular mit der Methode get oder post in $GLOBALS['_GET']
oder $GLOBALS['_POST']
senden, können Sie Ihre Formulardaten finden, wie Sie sie von super global $_GET
oder $_POST
1. Nach meinem Wissen in PHP gibt es neun Arten von Superglobals (vordefinierte globale PHP-Variablen) nämlich. $ GLOBALS, $ _SERVER, $ _REQUEST, $ _POST, $ _GET, $ _FILES, $ _ENV, $ _COOKIE und $ _SESSION dann meine Zweifel ist, was die Array-Elemente aus dem vordefinierten globalen Array $ GLOBALS viz. [_GET], [_POST], [_COOKIE], [_FILES] bedeuten, dass sie ihre eigene unabhängige Existenz als Superglobale haben?
Aus dem PHP-Dokument :
Verweist auf alle im globalen Bereich verfügbaren Variablen
Das heißt, Sie können auf superglobal
direkt oder auf $GLOBALS
zugreifen, ja, Sie haben zwei Möglichkeiten, auf sie zuzugreifen.
2. Was bedeutet [toWorkNormally] = & gt; 1 von oben Array-Ausgabe?
Es befindet sich in $ _COOKIE, also gibt es einen Cookie namens toWorkNormally
mit dem Wert von 1
. Weitere Informationen zu Cookies
3. Was bedeutet RECURSION in Element [GLOBALS] und wie werden diese Elemente gedruckt?
Rekursion bedeutet, dass es sich selbst referenziert, wenn es gedruckt wird, dann würde es den Inhalt von $GLOBALS
wieder in GLOBALS
verschachtelt anzeigen , das würde Endlosschleife verursachen. Um zu vermeiden, dass PHP nur *RECURSION*
stattdessen gedruckt hat.
4. Da der Zweck des $ GLOBALS-Arrays darin besteht, Variablen zu speichern, die vom Benutzer global deklariert wurden, wie wurde dieses Array zuvor mit anderen Werten gefüllt, da ich in meinem Code keine globale Variable deklariert habe?
Aus dem PHP-Dokument :
Mehrere vordefinierte Variablen in PHP sind "Superglobale", was bedeutet, dass sie in allen Bereichen eines Skripts verfügbar sind. Es ist nicht notwendig, globale Variable $ zu machen; um auf sie innerhalb von Funktionen oder Methoden zuzugreifen.
Mit anderen Worten, $GLOBALS
zeigt Ihnen diese vordefinierten Variablen aus PHP und auch die Werte, die Sie manuell setzen.
Das PHP-Handbuch sagt folgendes über die Variable $GLOBALS
:
Ein assoziatives Array, das Verweise auf alle Variablen enthält, die derzeit im globalen Bereich des Skripts definiert sind. Die Variablennamen sind die Schlüssel des Arrays.
Dies beschreibt genau, was die Variable macht. Es ist einfach ein Verweis auf vorhandene Variablen.
Die RECURSION
, von der Sie sprechen, ist die Variable $GLOBALS
, die sich auf sich selbst bezieht. Da wir nicht wollen, dass PHP endlos die gleiche Ausgabe ausgibt und dabei den Server zum Absturz bringt, gibt es eine eingebaute Failsafe, die Ihnen den RECURSION
alert anzeigt, falls dies der Fall ist.
Ich möchte hinzufügen, dass $GLOBALS
eine superglobale oder voreingestellte globale Variable ist. Dies bedeutet, dass es in allen Bereichen Ihres Skripts verfügbar ist.
Tags und Links arrays php global-variables global superglobals