Die Variable PHP $ GLOBALS verstehen

8

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:

  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 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?
  2. Was ist mit [toWorkNormally] => 1 von der obigen Array-Ausgabe gemeint?
  3. Was bedeutet RECURSION im Element [GLOBALS] und wie wird gedruckt? diese Elemente?
  4. Da der Zweck von $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.

    
user2839497 07.01.2017, 18:00
quelle

4 Antworten

3

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.

Link zu den Referenzen in PHP

  

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

    
J2D8T 10.01.2017 10:27
quelle
0

$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

gesetzt haben

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

bekommen können     
Var Yan 07.01.2017 18:16
quelle
0

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.

    
Edson Horacio Junior 16.01.2017 17:20
quelle
0

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.

Ressourcen

Peter 10.01.2017 11:22
quelle