Variablen in PHP. Variablen in PHP Php sichern alle Post-Variablen

Umgebungsvariablen (Umgebungsvariablen) in Windows enthalten verschiedene Informationen zu den Systemeinstellungen und der Benutzerumgebung. Unterscheiden Sie zwischen Benutzer-, System- und Prozessumgebungsvariablen.

Der einfachste Weg, den Inhalt von Umgebungsvariablen unter Windows anzuzeigen, besteht darin, Systemeigenschaften zu öffnen ( sysdm.cpl) -\u003e Erweitert -\u003e Umgebungsvariablen. Wie Sie sehen können, gibt es im geöffneten Abschnitt zwei Abschnitte: Der obere enthält die Umgebungsvariablen des Benutzers, der untere enthält die Systemvariablen.

Zusätzlich werden Umgebungsvariablen in der Systemregistrierung gespeichert. Benutzerdefinierte Variablen werden im Abschnitt gespeichert. System - in HKLM \\ SYSTEM \\ CurrentControlSet \\ Control \\ Session Manager \\ Environment.

Sie können die Werte aller Umgebungsvariablen in der Windows-Befehlszeile anzeigen. Der Befehl ist einfach:

Der Befehl listet die Umgebungsvariablen und ihre Werte auf.

In PowerShell können Sie mit dem Befehl alle Umgebungsvariablen anzeigen:

Wenn Sie nur den Wert einer Variablen anzeigen möchten, müssen Sie den Befehl echo verwenden, und der Variablenname muss in Prozentzeichen eingeschlossen sein. Zum Beispiel,

Echo% systemroot%

set\u003e c: \\ tmp \\ env_var.txt

Umgebungsvariablen eines bestimmten Prozesses können mit dem kostenlosen abgerufen werden process Explorer-Dienstprogramme (von Sysinternals). Es reicht aus, die Eigenschaften des Prozesses zu öffnen und zur Registerkarte zu wechseln Umgebung.

vor 13 Jahren

Ein kleines Problem, auf das Sie achten sollten:

Wenn Sie RegisterGlobals und verwandte Programme deaktivieren und dann get_defined_vars () verwenden, wird möglicherweise Folgendes angezeigt:

Array
[GLOBALS] \u003d\u003e Array
[GLOBALS] \u003d\u003e Array
* REKURSION *
[_POST] \u003d\u003e Array ()
[_GET] \u003d\u003e Array ()
[_COOKIE] \u003d\u003e Array ()
[_FILES] \u003d\u003e Array ()
)

[_POST] \u003d\u003e Array ()
[_GET] \u003d\u003e Array ()
[_COOKIE] \u003d\u003e Array ()
[_FILES] \u003d\u003e Array ()

)
?>

Beachten Sie, dass $ _SERVER nicht vorhanden ist. Es scheint, dass PHP das superglobale $ _SERVER nur lädt, wenn es irgendwo verwendet wird. Sie könnten dies tun:

drucken "

". htmlspecialchars (print_r (get_defined_vars (), true))."
" ;
drucken "
". htmlspecialchars (print_r ($ _SERVER, true))."
" ;
?>

Und dann erscheint $ _SERVER in beiden Listen. Ich denke, es ist nicht wirklich ein Gotcha, weil so oder so nichts Schlimmes passieren wird, aber es ist trotzdem eine interessante Neugier.

vor 6 Jahren

Da get_defined_vars () die Variablen nur an dem Punkt abruft, an dem Sie die Funktion aufrufen, gibt es eine einfache Möglichkeit, die im aktuellen Bereich definierten Variablen abzurufen.

// Ganz oben in deinem PHP-Skript
$ vars \u003d get_defined_vars ();

// Jetzt mach deine Sachen
$ foo \u003d "foo";
$ bar \u003d "bar";

// Alle im aktuellen Bereich definierten Variablen abrufen
$ vars \u003d array_diff (get_defined_vars (), $ vars);

echo "

"
;
print_r ($ vars);
echo "
" ;
?>

vor 15 Jahren

Hier ist eine Funktion, die einen Debug-Bericht zur Anzeige oder E-Mail generiert
mit get_defined_vars. Hervorragend geeignet, um einen detaillierten Schnappschuss ohne zu erhalten
auf Benutzereingaben angewiesen.

funktion generateDebugReport ($ method, $ defined_vars, $ email \u003d "undefined") (
// Funktion zum Erstellen eines Debug-Berichts zum Anzeigen oder E-Mailen.
// Verwendung: generateDebugReport (Methode, get_defined_vars (), E-Mail);
// Wobei die Methode "Browser" oder "E-Mail" ist.

// Erstelle eine Ignorierliste für Schlüssel, die von "get_defined_vars" zurückgegeben werden.
// Zum Beispiel HTTP_POST_VARS, HTTP_GET_VARS und andere
// redundant (wie _POST, _GET)
// Fügen Sie auch Variablen hinzu, die aus Sicherheitsgründen ignoriert werden sollen - d. H. PHPSESSID.
$ ignorelist \u003d array ("HTTP_POST_VARS", "HTTP_GET_VARS",
"HTTP_COOKIE_VARS", "HTTP_SERVER_VARS",
"HTTP_ENV_VARS", "HTTP_SESSION_VARS",
"_ENV", "PHPSESSID", "SESS_DBUSER",
"SESS_DBPASS", "HTTP_COOKIE");

$ timestamp \u003d date ("m / d / y h: m: s");
$ message \u003d "Debug-Bericht erstellt $ timestamp \\ n";

// Den letzten SQL-Fehler abrufen, wobei $ link die Ressourcenkennung ist
// für mysql_connect. Kommentieren oder ändern Sie Ihre Datenbank- oder Abstraktionskonfiguration.
globaler $ link;
$ sql_error \u003d mysql_error ($ link);
if ($ sql_error) (
$ message. \u003d "\\ nMysql Messages: \\ n". mysql_error ($ link);
}
// MySQL beenden

// Könnte hier eine rekursive Funktion verwenden. Du hast die Idee ;-)
foreach ($ defined_vars als $ key \u003d\u003e $ val) (
if (is_array ($ val) &&! in_array ($ key, $ ignorelist) && count ($ val)\u003e 0) (
$ message. \u003d "\\ n $ key array (key \u003d value): \\ n";
foreach ($ val als $ subkey \u003d\u003e $ subval) (
if (! in_array ($ subkey, $ ignorelist) &&! is_array ($ subval)) (
$ message. \u003d $ subkey. "\u003d". $ subval. "\\ n";
}
elseif (! in_array ($ subkey, $ ignorelist) && is_array ($ subval)) (
foreach ($ subval als $ subsubkey \u003d\u003e $ subsubval) (
if (! in_array ($ subsubkey, $ ignorelist)) (
$ message. \u003d $ subsubkey. "\u003d". $ subsubval. "\\ n" ;
}
}
}
}
}
elseif (!
is_array ($ val) &&! in_array ($ key, $ ignorelist) && $ val) (
$ message. \u003d "\\ nVariable". $ key. "\u003d". $ val. "\\ n";
}
}

If ($ method \u003d\u003d "browser") (
echo nl2br ($ message);
}
elseif ($ method \u003d\u003d "email") (
if ($ email \u003d\u003d "undefined") (
$ email \u003d $ _SERVER ["SERVER_ADMIN"];
}

$ mresult \u003d mail ($ email, "Debug-Bericht für". $ _ENV ["HOSTNAME"]. "", $ message);
if ($ mresult \u003d\u003d 1) (
Echo "Debug-Bericht erfolgreich gesendet. \\ N";
}
sonst (
Echo "Debug-Bericht konnte nicht gesendet werden. \\ N";
}
}
}
?>

Vor 17 Jahren

Einfache Routine zum Konvertieren eines get_defined_vars-Objekts in XML.

funktion obj2xml ($ v, $ indent \u003d "") (
while (Liste ($ key, $ val) \u003d jeweils ($ v)) (
if ($ key \u003d\u003d "__attr") weiter;
// Auf __attr prüfen
if (is_object ($ val -\u003e __attr)) (
while (Liste ($ key2, $ val2) \u003d jeweils ($ val -\u003e __attr)) (
$ attr. \u003d "$ key2 \u003d" $ val2 ";
}
}
sonst $ attr \u003d "";
if (is_array ($ val) || is_object ($ val)) (
print ("$ indent< $key$attr >\\ n ");
obj2xml ($ val, $ indent. "");
print ("$ indent\\ n ");
}
sonst drucken ("$ indent< $key$attr > $ val\\ n ");
}
}

// Beispielobjekt
$ x -\u003e name -\u003e first \u003d "John";
$ x -\u003e name -\u003e last \u003d "Smith";
$ x -\u003e arr ["Fruit"] \u003d "Bannana";
$ x -\u003e arr ["Veg"] \u003d "Karotte";
$ y -\u003e Kunde \u003d $ x;
$ y -\u003e Kunde -\u003e __attr -\u003e id \u003d "176C4";

$ z \u003d get_defined_vars ();
obj2xml ($ z ["y"]);
?>
wird ausgegeben:


John
Schmied


Bannana
Karotte

Vor 11 Jahren

Als Hinweis gibt get_defined_vars () keine Reihe von Variablenreferenzen zurück (wie ich gehofft habe). Beispielsweise:

// eine Variable definieren
$ my_var \u003d "foo";

// Holen Sie sich unsere Liste der definierten Variablen
$ defined_vars \u003d get_defined_vars ();

// Versuchen Sie nun, den Wert über das zurückgegebene Array zu ändern
$ defined_vars ["my_var"] \u003d "bar";

echo $ my_var, "\\ n";

?>

gibt "foo" (den ursprünglichen Wert) aus. Es wäre schön, wenn get_defined_vars () ein optionales Argument hätte, um sie zu referenzieren, aber ich stelle mir vor, es ist eine ziemlich spezielle Anfrage. Sie können es selbst (weniger bequem) mit etwas wie:

$ defined_vars \u003d array ();
$ var_names \u003d array_keys (get_defined_vars ());

foreach ($ var_names als $ var_name)
{
$ defined_vars [$ var_name] \u003d & $ $ var_name;
}

?>

vor 1 Jahr

Ich habe hier zuvor über "this" in get_defined_vars geschrieben.

Es stellt sich heraus, dass es nicht immer da ist, aber in bestimmten Fällen wird es unerklärlich erscheinen.

Php -r "
Klassentest (
öffentliche Funktion a () (var_dump (array_keys (get_defined_vars ())); $ a \u003d 123;)
öffentliche Funktion b () (var_dump (array_keys (get_defined_vars ())); $ this;)
}
$ t \u003d neuer Test ();
$ t-\u003e a ();
$ t-\u003e b ();
"

Array ()
Array ("this")

Dies geschieht nicht in PHP 7.2, sondern in PHP 5.6.

vor 1 Jahr

Einige Kommentare hier weisen darauf hin, dass diese Funktion keine Referenzen zurückgibt. Es werden jedoch Namen zurückgegeben und Namen sind "Referenzen".

Ich würde die Vorschläge hier nicht empfehlen, die es in Referenzen umwandeln.

Öffentliche Funktion x ($ a, $ b, $ c) (
foreach (array_keys (get_defined_vars ()) als $ key)
if ($ key! \u003d\u003d "this")
$ this-\u003e y ($ ($ key));
}

Öffentliche Funktion y (& $ input) (
$ input ++;
}

Anstelle von $ () können Sie auch $$ verwenden.

Ich habe in meiner Zeit einige verrückte Dinge getan, um extrem generischen Code zu erstellen, aber ich musste noch nie so etwas tun. Es könnte nicht einmal funktionieren (sollte aber, da es sich nicht von $ a [$ key] unterscheidet).

Sie könnten auch $$ key ++ ausführen, aber ich habe noch nie Code wie diesen gesehen, der nicht schrecklich schlecht war (mit Dynamic, wo Dynamic nicht vorteilhaft ist).

Wenn Sie so etwas tun, geben Sie ihm zusätzliche Kontrolle.

vor 13 Jahren

Ein kleines Problem, auf das Sie achten sollten:

Wenn Sie RegisterGlobals und verwandte Programme deaktivieren und dann get_defined_vars () verwenden, wird möglicherweise Folgendes angezeigt:

Array
[GLOBALS] \u003d\u003e Array
[GLOBALS] \u003d\u003e Array
* REKURSION *
[_POST] \u003d\u003e Array ()
[_GET] \u003d\u003e Array ()
[_COOKIE] \u003d\u003e Array ()
[_FILES] \u003d\u003e Array ()
)

[_POST] \u003d\u003e Array ()
[_GET] \u003d\u003e Array ()
[_COOKIE] \u003d\u003e Array ()
[_FILES] \u003d\u003e Array ()

)
?>

Beachten Sie, dass $ _SERVER nicht vorhanden ist. Es scheint, dass PHP das superglobale $ _SERVER nur lädt, wenn es irgendwo verwendet wird. Sie könnten dies tun:

drucken "

". htmlspecialchars (print_r (get_defined_vars (), true))."
" ;
drucken "
". htmlspecialchars (print_r ($ _SERVER, true))."
" ;
?>

Und dann erscheint $ _SERVER in beiden Listen. Ich denke, es ist nicht wirklich ein Gotcha, weil so oder so nichts Schlimmes passieren wird, aber es ist trotzdem eine interessante Neugier.

vor 6 Jahren

Da get_defined_vars () die Variablen nur an dem Punkt abruft, an dem Sie die Funktion aufrufen, gibt es eine einfache Möglichkeit, die im aktuellen Bereich definierten Variablen abzurufen.

// Ganz oben in deinem PHP-Skript
$ vars \u003d get_defined_vars ();

// Jetzt mach deine Sachen
$ foo \u003d "foo";
$ bar \u003d "bar";

// Alle im aktuellen Bereich definierten Variablen abrufen
$ vars \u003d array_diff (get_defined_vars (), $ vars);

echo "

"
;
print_r ($ vars);
echo "
" ;
?>

vor 15 Jahren

Hier ist eine Funktion, die einen Debug-Bericht zur Anzeige oder E-Mail generiert
mit get_defined_vars. Hervorragend geeignet, um einen detaillierten Schnappschuss ohne zu erhalten
auf Benutzereingaben angewiesen.

funktion generateDebugReport ($ method, $ defined_vars, $ email \u003d "undefined") (
// Funktion zum Erstellen eines Debug-Berichts zum Anzeigen oder E-Mailen.
// Verwendung: generateDebugReport (Methode, get_defined_vars (), E-Mail);
// Wobei die Methode "Browser" oder "E-Mail" ist.

// Erstelle eine Ignorierliste für Schlüssel, die von "get_defined_vars" zurückgegeben werden.
// Zum Beispiel HTTP_POST_VARS, HTTP_GET_VARS und andere
// redundant (wie _POST, _GET)
// Fügen Sie auch Variablen hinzu, die aus Sicherheitsgründen ignoriert werden sollen - d. H. PHPSESSID.
$ ignorelist \u003d array ("HTTP_POST_VARS", "HTTP_GET_VARS",
"HTTP_COOKIE_VARS", "HTTP_SERVER_VARS",
"HTTP_ENV_VARS", "HTTP_SESSION_VARS",
"_ENV", "PHPSESSID", "SESS_DBUSER",
"SESS_DBPASS", "HTTP_COOKIE");

$ timestamp \u003d date ("m / d / y h: m: s");
$ message \u003d "Debug-Bericht erstellt $ timestamp \\ n";

// Den letzten SQL-Fehler abrufen, wobei $ link die Ressourcenkennung ist
// für mysql_connect. Kommentieren oder ändern Sie Ihre Datenbank- oder Abstraktionskonfiguration.
globaler $ link;
$ sql_error \u003d mysql_error ($ link);
if ($ sql_error) (
$ message. \u003d "\\ nMysql Messages: \\ n". mysql_error ($ link);
}
// MySQL beenden

// Könnte hier eine rekursive Funktion verwenden. Du hast die Idee ;-)
foreach ($ defined_vars als $ key \u003d\u003e $ val) (
if (is_array ($ val) &&! in_array ($ key, $ ignorelist) && count ($ val)\u003e 0) (
$ message. \u003d "\\ n $ key array (key \u003d value): \\ n";
foreach ($ val als $ subkey \u003d\u003e $ subval) (
if (! in_array ($ subkey, $ ignorelist) &&! is_array ($ subval)) (
$ message. \u003d $ subkey. "\u003d". $ subval. "\\ n";
}
elseif (! in_array ($ subkey, $ ignorelist) && is_array ($ subval)) (
foreach ($ subval als $ subsubkey \u003d\u003e $ subsubval) (
if (! in_array ($ subsubkey, $ ignorelist)) (
$ message. \u003d $ subsubkey. "\u003d". $ subsubval. "\\ n" ;
}
}
}
}
}
elseif (!
is_array ($ val) &&! in_array ($ key, $ ignorelist) && $ val) (
$ message. \u003d "\\ nVariable". $ key. "\u003d". $ val. "\\ n";
}
}

If ($ method \u003d\u003d "browser") (
echo nl2br ($ message);
}
elseif ($ method \u003d\u003d "email") (
if ($ email \u003d\u003d "undefined") (
$ email \u003d $ _SERVER ["SERVER_ADMIN"];
}

$ mresult \u003d mail ($ email, "Debug-Bericht für". $ _ENV ["HOSTNAME"]. "", $ message);
if ($ mresult \u003d\u003d 1) (
Echo "Debug-Bericht erfolgreich gesendet. \\ N";
}
sonst (
Echo "Debug-Bericht konnte nicht gesendet werden. \\ N";
}
}
}
?>

Vor 17 Jahren

Einfache Routine zum Konvertieren eines get_defined_vars-Objekts in XML.

funktion obj2xml ($ v, $ indent \u003d "") (
while (Liste ($ key, $ val) \u003d jeweils ($ v)) (
if ($ key \u003d\u003d "__attr") weiter;
// Auf __attr prüfen
if (is_object ($ val -\u003e __attr)) (
while (Liste ($ key2, $ val2) \u003d jeweils ($ val -\u003e __attr)) (
$ attr. \u003d "$ key2 \u003d" $ val2 ";
}
}
sonst $ attr \u003d "";
if (is_array ($ val) || is_object ($ val)) (
print ("$ indent< $key$attr >\\ n ");
obj2xml ($ val, $ indent. "");
print ("$ indent\\ n ");
}
sonst drucken ("$ indent< $key$attr > $ val\\ n ");
}
}

// Beispielobjekt
$ x -\u003e name -\u003e first \u003d "John";
$ x -\u003e name -\u003e last \u003d "Smith";
$ x -\u003e arr ["Fruit"] \u003d "Bannana";
$ x -\u003e arr ["Veg"] \u003d "Karotte";
$ y -\u003e Kunde \u003d $ x;
$ y -\u003e Kunde -\u003e __attr -\u003e id \u003d "176C4";

$ z \u003d get_defined_vars ();
obj2xml ($ z ["y"]);
?>
wird ausgegeben:


John
Schmied


Bannana
Karotte

Vor 11 Jahren

Als Hinweis gibt get_defined_vars () keine Reihe von Variablenreferenzen zurück (wie ich gehofft habe). Beispielsweise:

// eine Variable definieren
$ my_var \u003d "foo";

// Holen Sie sich unsere Liste der definierten Variablen
$ defined_vars \u003d get_defined_vars ();

// Versuchen Sie nun, den Wert über das zurückgegebene Array zu ändern
$ defined_vars ["my_var"] \u003d "bar";

echo $ my_var, "\\ n";

?>

gibt "foo" (den ursprünglichen Wert) aus. Es wäre schön, wenn get_defined_vars () ein optionales Argument hätte, um sie zu referenzieren, aber ich stelle mir vor, es ist eine ziemlich spezielle Anfrage. Sie können es selbst (weniger bequem) mit etwas wie:

$ defined_vars \u003d array ();
$ var_names \u003d array_keys (get_defined_vars ());

foreach ($ var_names als $ var_name)
{
$ defined_vars [$ var_name] \u003d & $ $ var_name;
}

?>

vor 1 Jahr

Ich habe hier zuvor über "this" in get_defined_vars geschrieben.

Es stellt sich heraus, dass es nicht immer da ist, aber in bestimmten Fällen wird es unerklärlich erscheinen.

Php -r "
Klassentest (
öffentliche Funktion a () (var_dump (array_keys (get_defined_vars ())); $ a \u003d 123;)
öffentliche Funktion b () (var_dump (array_keys (get_defined_vars ())); $ this;)
}
$ t \u003d neuer Test ();
$ t-\u003e a ();
$ t-\u003e b ();
"

Array ()
Array ("this")

Dies geschieht nicht in PHP 7.2, sondern in PHP 5.6.

vor 1 Jahr

Einige Kommentare hier weisen darauf hin, dass diese Funktion keine Referenzen zurückgibt. Es werden jedoch Namen zurückgegeben und Namen sind "Referenzen".

Ich würde die Vorschläge hier nicht empfehlen, die es in Referenzen umwandeln.

Öffentliche Funktion x ($ a, $ b, $ c) (
foreach (array_keys (get_defined_vars ()) als $ key)
if ($ key! \u003d\u003d "this")
$ this-\u003e y ($ ($ key));
}

Öffentliche Funktion y (& $ input) (
$ input ++;
}

Anstelle von $ () können Sie auch $$ verwenden.

Ich habe in meiner Zeit einige verrückte Dinge getan, um extrem generischen Code zu erstellen, aber ich musste noch nie so etwas tun. Es könnte nicht einmal funktionieren (sollte aber, da es sich nicht von $ a [$ key] unterscheidet).

Sie könnten auch $$ key ++ ausführen, aber ich habe noch nie Code wie diesen gesehen, der nicht schrecklich schlecht war (mit Dynamic, wo Dynamic nicht vorteilhaft ist).

Wenn Sie so etwas tun, geben Sie ihm zusätzliche Kontrolle.

Sicher haben Sie einen Kleiderschrank oder eine Kommode zu Hause. Das Prinzip ihrer Verwendung ist einfach: Wir legen Dinge dort ab, die wir momentan nicht benötigen, aber möglicherweise nach einer Weile benötigen.

Variablen funktionieren genauso. Sie können etwas Wert in sie legen und dort speichern, bis Sie es brauchen.

Variablen erstellen

Sie können einen Wert wie folgt in eine Variable einfügen:

Im obigen Code haben wir die Variable $ name erstellt und den Wert von Ivan eingefügt. Dann haben wir die Variable $ age erstellt und ihr den Wert 20 zugewiesen.

Der Name "Variable" bedeutet, dass sich sein Wert während der Skriptausführung ändern kann:

In einigen Sprachen muss eine Variable zuerst "deklariert" und dann verwendet werden. In PHP gibt es keine Deklaration - die Variable wird erstellt, sobald Sie einen Wert eingeben.
PHP-Programmierer sagen jedoch häufig "Variable deklarieren" anstelle von "Variable erstellen".

Anstatt "einen Wert in eine Variable zu setzen", sagen sie oft "einen Wert zuweisen".
Der Grund ist einfach: Das Symbol \u003d, mit dem wir einen Wert in einer Variablen speichern, wird als "Zuweisungsoperator" bezeichnet. Daher der Begriff "angemessen".

Regeln für die Benennung von Variablen

1. Der Variablenname beginnt mit dem Symbol $.

2. Das zweite Zeichen kann ein Buchstabe oder ein Unterstrich sein.

Variablennamen unterscheiden zwischen Groß- und Kleinschreibung. $ name und $ Name sind unterschiedliche Variablen.

Anzeigen des Werts einer Variablen auf dem Bildschirm

Sie können eine Variable mit dem bereits bekannten Befehl echo anzeigen:

Mit dem Befehl echo können Sie mehrere Werte gleichzeitig anzeigen:

Beachten Sie, dass wir 2 Werte an das Echo übergeben haben, die durch Kommas getrennt sind. Auf diese Weise können wir so viele Werte übertragen, wie wir möchten. Die folgenden zwei Beispiele führen zu demselben Ergebnis:

Es gibt auch eine Kurzsyntax für die Ausgabe von Variablen in PHP. Stattdessen

Vor PHP 5.4 funktionierte die Kurzschrift-Syntax nur, wenn die Direktive short_open_tag in den PHP-Einstellungen aktiviert war, wodurch auch das Kurzschrift-Öffnungs-Tag verwendet werden kann

Überprüfen des Werts einer Variablen

Der Echo-Befehl ist nicht immer praktisch, um den aktuellen Wert einer Variablen zu überprüfen. Wenn Sie beispielsweise versuchen, eine leere Zeichenfolge anzuzeigen, wird auf dem Bildschirm nichts angezeigt. Und es ist nicht klar, was der Grund ist - eine leere Variable oder ein nicht funktionierender Code.

Daher wird die Funktion var_dump () verwendet, um den Wert einer Variablen zu überprüfen:

Das Ergebnis der Skriptausführung:

String (5) Vasya-String (0)

Wie Sie sehen können, zeigte PHP nicht nur den Inhalt der Variablen an, sondern auch die Anzahl der Zeichen und sogar den Typ der Variablen (Zeichenfolge). In den nächsten Lektionen werden wir uns die Datentypen genauer ansehen.

Variablen löschen

Sie können eine vorhandene Variable mit der Funktion unset () löschen:

Jetzt ist es Zeit, ein wenig zu üben.

Denken Sie daran, dass fast jede PHP-Aufgabe mehrere Lösungen haben kann. Wenn sich Ihre Entscheidungen von denen auf dieser Website unterscheiden, bedeutet dies nicht, dass Sie etwas falsch gemacht haben.

Schreiben Sie ein Skript, das:
1. Erstellt Variablen mit Titeln, Titel und Inhalt sowie einigen Werten.
2. Gibt den Wert der Titelvariablen im h1-Tag und den Wert der Inhaltsvariablen im div-Tag aus.

Lösung anzeigen

", $ title,""; echo"

", $ content,"
"; ?>

Ich möchte Ihre Aufmerksamkeit darauf lenken, dass diese Entscheidung nicht die einzig richtige ist. Der folgende Code führt beispielsweise zum gleichen Ergebnis:

Diese Lektion untersucht den Umfang von PHP-Variablen. Erläutert den Unterschied zwischen lokalen und globalen Bereichen, zeigt, wie auf globale Variablen innerhalb einer Funktion zugegriffen wird, wie mit Superglobalen gearbeitet wird und wie statische Variablen erstellt werden.

Wenn Sie anfangen, PHP zu lernen und mit Funktionen und Objekten zu arbeiten, ist der Umfang der Variablen etwas verwirrend. Glücklicherweise sind die diesbezüglichen Regeln von PHP sehr einfach zu verstehen (im Vergleich zu anderen Programmiersprachen).

Was ist Umfang?

Der Variablenbereich ist der Kontext, in dem eine Variable definiert wurde und auf den zugegriffen werden kann. PHP hat zwei variable Bereiche:

  • Der Globus - Auf Variablen kann überall im Skript zugegriffen werden
  • Lokal - Auf Variablen kann nur innerhalb der Funktion zugegriffen werden, in der sie definiert wurden

Der variable Bereich und insbesondere der lokale Bereich erleichtern die Codeverwaltung erheblich. Wenn alle Variablen global wären, könnten sie an einer beliebigen Stelle im Skript geändert werden. Dies würde zu Chaos und großen Skripten führen, da sehr oft verschiedene Teile des Skripts Variablen mit demselben Namen verwenden. Indem Sie den lokalen Kontext festlegen, definieren Sie die Grenzen des Codes, der auf die Variable zugreifen kann, wodurch der Code robuster, modularer und einfacher zu debuggen ist.

Variablen mit globalem Gültigkeitsbereich werden als global bezeichnet, und Variablen mit lokalem Gültigkeitsbereich werden als lokal bezeichnet.

Hier ist ein Beispiel für die Funktionsweise globaler und lokaler Variablen.

";) sayHello (); echo" Wert \\ $ globalName: "$ globalName"
"; echo" Wert \\ $ localName: "$ localName"
"; ?>

Hallo Harry! $ GlobalName-Wert: "Zoe" $ localName-Wert: ""

In diesem Skript haben wir zwei Variablen erstellt:

  • $ globalName - Das global Variable
  • $ localName - Das lokal Eine Variable, die in der Funktion sayHello () erstellt wird.

Nach dem Erstellen der Variablen und der Funktion ruft das Skript sayHello () auf, das "Hallo Harry!" ... Das Skript versucht dann, die Werte der beiden Variablen mithilfe der Echofunktion zu drucken. Folgendes ist los:

  • Als $ globalName wurde außerhalb der Funktion erstellt und ist an einer beliebigen Stelle im Skript verfügbar, sodass "Zoe" angezeigt wird.
  • $ localName wird nur innerhalb der Funktion sayHello () verfügbar sein. Da sich der Echoausdruck außerhalb der Funktion befindet, erlaubt PHP keinen Zugriff auf die lokale Variable. Stattdessen geht PHP davon aus, dass der Code eine neue Variable mit dem Namen $ localName erstellt, die den Standardwert einer leeren Zeichenfolge erhält. Aus diesem Grund gibt der zweite Echoaufruf den Wert "" für die Variable $ localName aus.

Zugriff auf globale Variablen innerhalb einer Funktion

Zugriff auf eine globale Variable außer Funktion schreibe einfach ihren Namen. Aber um auf die globale Variable zuzugreifen innenfunktionmüssen Sie zuerst die Variable in der Funktion mit dem Schlüsselwort global als global deklarieren:

Funktion myFunction () (global $ globalVariable; // Zugriff auf die globale Variable $ globalVariable)

Wenn Sie dies nicht tun, geht PHP davon aus, dass Sie eine lokale Variable erstellen oder verwenden.

Hier ist ein Beispielskript, das eine globale Variable in einer Funktion verwendet:

"; global $ globalName; echo" Hallo $ globalName!
";) sayHello ();?\u003e

Bei der Ausführung gibt das Skript Folgendes aus:

Hallo Harry! Hallo Zoya!

Die Funktion sayHello () verwendet das Schlüsselwort global, um die Variable $ globalName als global zu deklarieren. Dann kann sie auf die Variable zugreifen und ihren Wert anzeigen ("Zoe").

Was sind Superglobale?

PHP verfügt über einen speziellen Satz vordefinierter globaler Arrays, die verschiedene Informationen enthalten. Solche Arrays werden aufgerufen superglobale, da sie von überall im Skript zugänglich sind, einschließlich des inneren Funktionsbereichs, und nicht mit dem globalen Schlüsselwort definiert werden müssen.

Hier ist eine Liste der in PHP 5.3 verfügbaren Superglobalen:

  • $ GLOBALS - Liste aller globalen Variablen im Skript (außer Superglobals)
  • $ _GET - Enthält eine Liste aller Formularfelder, die vom Browser mithilfe einer GET-Anforderung gesendet wurden
  • $ _POST - enthält eine Liste aller Formularfelder, die vom Browser mithilfe einer POST-Anforderung gesendet wurden
  • $ _COOKIE - enthält eine Liste aller vom Browser gesendeten Cookies
  • $ _REQUEST - enthält alle Schlüssel / Wert-Kombinationen, die in den Arrays $ _GET, $ _POST, $ _COOKIE enthalten sind
  • $ _FILES - enthält eine Liste aller vom Browser geladenen Dateien
  • $ _SESSION - Ermöglicht das Speichern und Verwenden von Sitzungsvariablen für den aktuellen Browser
  • $ _SERVER - enthält Informationen zum Server, z. B. den Dateinamen des ausgeführten Skripts und die IP-Adresse des Browsers.
  • $ _ENV - Enthält eine Liste von Umgebungsvariablen, die an PHP übergeben wurden, z. B. CGI-Variablen.
Sie können beispielsweise $ _GET verwenden, um die Werte der Variablen abzurufen, die in der URL-Zeichenfolge der Skriptanforderung enthalten sind, und sie auf der folgenden Seite anzuzeigen:

Wenn Sie das obige Skript mit der URL-Zeichenfolge http://www.example.com/script.php?yourName\u003dFred ausführen, wird Folgendes ausgegeben:

Hallo Fred!

Warnung! In einem echten Skript sollten Sie eine solche Datenübertragung aus Sicherheitsgründen niemals verwenden. Sie sollten Ihre Daten immer überprüfen oder filtern.

Das Superglobal $ GLOBALS ist sehr praktisch zu verwenden, da Sie damit den Zugriff auf globale Variablen in einer Funktion organisieren können, ohne das globale Schlüsselwort zu benötigen. Zum Beispiel:

";) sayHello (); // Gibt" Hallo, Zoe! "aus?\u003e

Statische Variablen: Sie befinden sich irgendwo in der Nähe

Wenn Sie eine lokale Variable innerhalb einer Funktion erstellen, ist diese nur vorhanden, während die Funktion ausgeführt wird. Wenn die Funktion endet, verschwindet die lokale Variable. Beim erneuten Aufruf der Funktion wird eine neue lokale Variable erstellt.

Dies funktioniert in den meisten Fällen hervorragend. Auf diese Weise sind die Funktionen in sich geschlossen und funktionieren bei jedem Aufruf gleich.

Es gibt jedoch Situationen, in denen es zweckmäßig wäre, eine lokale Variable zu erstellen, die sich ihren Wert zwischen Funktionsaufrufen "merkt". Eine solche Variable wird als statisch bezeichnet.

Um eine statische Variable in einer Funktion zu erstellen, müssen Sie das Schlüsselwort static vor dem Variablennamen verwenden und einen Anfangswert festlegen. Zum Beispiel:

Funktion myFunction () (statisch $ myVariable \u003d 0;)

Betrachten wir eine Situation, in der es bequem ist, eine statische Variable zu verwenden. Angenommen, Sie erstellen eine Funktion, die beim Aufruf ein Widget erstellt und die Anzahl der bereits erstellten Widgets anzeigt. Sie können versuchen, Code wie folgt mit einer lokalen Variablen zu schreiben:


"; echo createWidget ()." haben wir bereits erstellt.
"; echo createWidget ()." haben wir bereits erstellt.\u003e
"; ?>

Da die Variable $ numWidgets jedoch bei jedem Aufruf der Funktion erstellt wird, erhalten wir das folgende Ergebnis:

Wir erstellen einige Widgets ... 1, die wir bereits erstellt haben. 1 haben wir bereits erstellt. 1 haben wir bereits erstellt.

Mit einer statischen Variablen können wir den Wert von einem Funktionsaufruf zum nächsten speichern:

"; echo createWidget ()." haben wir bereits erstellt.
"; echo createWidget ()." haben wir bereits erstellt.
"; echo createWidget ()."\u003e wir haben bereits erstellt.
"; ?>

Das Skript erzeugt nun die erwartete Ausgabe:

Wir erstellen einige Widgets ... 1, die wir bereits erstellt haben. 2 haben wir bereits erstellt. 3 haben wir bereits erstellt.

Obwohl eine statische Variable ihren Wert zwischen Funktionsaufrufen beibehält, ist sie nur gültig, wenn das Skript ausgeführt wird. Sobald das Skript seine Ausführung beendet hat, werden alle statischen Variablen sowie lokale und globale Variablen zerstört.

Das ist alles! Überprüfen Sie die PHP-Dokumentation häufig.