$GET Variablen in Funktionen ausgeben
Simone
- php
Hallo,
habe jetzt schon ewig rumprobiert. Ich dachte $_GET und $_POST Variablen bzw. arrays wären global, also auch in Funktionen gültig. Aber wenn ich eine per Post oder Get übergebene Variable in einer selbstdefinierten Funktion ausgeben will, geht's nicht. (Außerhalb einer Funktion schon). Weder mit: echo $Variable;
noch so:
echo $_GET ["Variable"];
Bin ratlos,
Simone
Hallo Simone!
$_Get und $_Post sind SuperGlobals.
Funktionen haben ihren eigenen Variablen-Definitionsraum.
Du musst die Variablen mit "global $variable" in der Funktion bekannt geben oder
beim Aufruf übergeben.
(PHP Variablen-Gültigkeit guckt immer von unten nach oben)
Gruss
Rainer
Hallo Rainer,
$_Get und $_Post sind SuperGlobals.
Nein, $_GET und $_POST sind SuperGlobals. Ansonsten stimmt das :)
Funktionen haben ihren eigenen Variablen-Definitionsraum.
Das ist auch richig.
Du musst die Variablen mit "global $variable" in der Funktion bekannt geben oder
beim Aufruf übergeben.
Das ist ebenfalls richtig.
Allerdings sind $_GET, $_POST, $_SERVER, $_COOKIE sowie $_SESSION, wie Simone (und Du) schon richtig erwähnt hat, SuperGlobals und
damit in _allen_ Variablenräumen vorhanden[1]. Auch in denen von
Funktionen.
Man muss also in selbstdefinierten Funktionen diese Arrays _nicht_
extra mit global bekanntmachen - sie sind es bereits.
Bei mir funktioniert folgender Code jedenfalls Problemlos, d.h. er
gibt z.B. bei einem Aufruf von "<scriptname>.php?foo=bar" "foo : bar"
aus (Hab's jetzt nur mit $_GET versucht, ist ja schon spät *g*).
<?php
function printGlobals()
{
foreach($_GET as $key => $val) {
echo $key." : ".$val."<br />\n";
}
}
printGlobals();
?>
Gruß,
dimde
Hallo dimde!
alles soweit OK!
um noch mal konkreter auf Simones Posting zurück zu kommen (hätte ich gleich machen sollen ;):
echo $Variable; /* geht nicht */
echo $_GET ["Variable"]; /* geht auch nicht */
aber
echo $_GET ['Variable']; /* muesste gehn */
$Variable = $GET['Variable']; echo $Variable; /*muesste auch gehen */
und
$Variable = "blabla"; /* verändert den Wert des array-elements nicht */
d.h.:
Das array $_GET ist zwar in der Funktion bekannt, 'Variable' ist aber nur der Pointer!
Die Variable muss im Namensraum der Funktion erst bekannt gemacht werden.
Ist wohl das gleiche was Du sagst - nur mit anderen Worten.
Habe es nicht getestet und wüste gerne ob ich damit richtig liege!?
Gruss
Rainer
Hallo Rainer,
echo $Variable; /* geht nicht */
Kommt drauf an, wo du $Variable definiert hast.
function bla()
{
$Variable = $_GET['Variable'];
echo $Variable;
}
funktioniert natürlich, wohingegen
$Variable = $_GET['Variable];
function bla()
{
echo $Variable;
}
nicht das gewünschte Ergebnis liefert.
echo $_GET ["Variable"]; /* geht auch nicht */
Sollte es eigentlich schon. Allerdings darf (vielleicht geht es
sogar, aber es ist kein guter Stil) kein Leerzeichen zwischen
"$_GET" und "[" stehen.
aber
echo $_GET ['Variable']; /* muesste gehn */
Solange Du keine Variablen in dem String hast, ist das genau das
gleiche wie $_GET["Variable"].
$Variable = $GET['Variable']; echo $Variable; /*muesste auch gehen */
$_GET['Variable'].
^
$Variable = "blabla"; /* verändert den Wert des array-elements nicht */
Genau.
d.h.:
Das array $_GET ist zwar in der Funktion bekannt, 'Variable' ist aber nur der Pointer!
Nein.
Wenn Du sowas machst "$Variable = $_GET['Variable];" dann ist
$Variable eine _Kopie_ von $_GET['Variable'].
Einen Pointer legst Du so an "$Variable = &$_GET['Variable'];". Wenn
Du dann $Variable einen anderen Wert zuweist "$Variable = "bla";",
dann hat $_GET['Variable'] den neuen Wert (bla), weil hier
ja $Variable nur auf $_GET['Variable'] _zeigt_ und selber keinen
Wert hat.
Habe es nicht getestet und wüste gerne ob ich damit richtig liege!?
Hoffe ich konnte Dir helfen und hab selber keinen Denkfehler
reingebracht :)
Gruß,
dimde