Globale Variablen
am 26.07.2006 22:10:38 von Mark Knochen
Hallo,
ich nutze seit längeren ein kleines Script, welches ein Formular
auswertet nach folgendem Prinzip:
function GetText()
{
global $text;
echo $text;
}
$text = $_POST['text'];
GetText();
Nach Umstellung des Providers auf PHP 5 wird
$text nicht mehr global erkannt.
Lediglich die Verwendung der Variable $_POST['text']
innerhalb der Funktion führt zu einer Ausgabe.
Habe ich was verpasst bei der Anwendung von global ?
Danke
Mark
Re: Globale Variablen
am 27.07.2006 00:20:35 von Sebastian Wessel
Mark Knochen schrieb:
> Nach Umstellung des Providers auf PHP 5 wird
> $text nicht mehr global erkannt.
> Lediglich die Verwendung der Variable $_POST['text']
> innerhalb der Funktion führt zu einer Ausgabe.
>
> Habe ich was verpasst bei der Anwendung von global ?
Du darfst global nicht als "was" verstehen, sondern als "wo".
Nicht "was" du siehst legst du damit fest, sondern "wo" du es siehst.
Nennt sich zwar beides "global", ist aber doch etwas Verschiedenes.
btw: Sei froh, dass du endlich mit der Nase draufgestoßen wurdest, jetzt
kannst du endlich ein paar "Fehler" ausmerzen ...
LG
Re: Globale Variablen
am 27.07.2006 00:26:59 von Mark Knochen
> Du darfst global nicht als "was" verstehen, sondern als "wo".
> Nicht "was" du siehst legst du damit fest, sondern "wo" du es siehst.
>
> Nennt sich zwar beides "global", ist aber doch etwas Verschiedenes.
>
> btw: Sei froh, dass du endlich mit der Nase draufgestoßen wurdest, jetzt
> kannst du endlich ein paar "Fehler" ausmerzen ...
>
> LG
Aber "wo" finde ich denn dann global Variablen?
$_GLOBALS nicht, oder?
Mark
Re: Globale Variablen
am 27.07.2006 00:55:39 von Ulf Kadner
Mark Knochen wrote:
> Aber "wo" finde ich denn dann global Variablen?
> $_GLOBALS nicht, oder?
Du bist doch nun schon so lange hier als Fragender dabei lieber Mark!
Da sollte es doch wirklich mal nicht schwer sein die Suchfunktion des
Dir bekannten PHP-Manuals nach 'global' mit Fokus aus 'all php.net
sides' zu bemuehen!
Gleich der 2. Treffer zeigt Dir was Du wissen willst.
MfG, Ulf
Re: Globale Variablen
am 27.07.2006 02:14:43 von Carsten Wiedmann
Sebastian Wessel schrieb:
> Mark Knochen schrieb:
> > Nach Umstellung des Providers auf PHP 5 wird
> > $text nicht mehr global erkannt.
> > Lediglich die Verwendung der Variable $_POST['text']
> > innerhalb der Funktion führt zu einer Ausgabe.
> >
> > Habe ich was verpasst bei der Anwendung von global ?
>
> Du darfst global nicht als "was" verstehen, sondern als "wo".
> Nicht "was" du siehst legst du damit fest, sondern "wo" du es siehst.
>
> Nennt sich zwar beides "global", ist aber doch etwas Verschiedenes.
Hm, hab leider nicht kapiert was du meinst. Kannst du das auch anders
erklären?
Bei mir tut sein Testscript mit PHP5 so wie von ihm eigenllich erwartet
(echo in der Funktion gibt den Wert aus). Ich würde das bei diesem
Testscript jedenfalls auch erwarten. (Habs aber zum Nachtesten "nur" mit
$_GET['text']) gemacht.)
Als Fehler würde ich hier nur den Funktionsnamen Gettext() feststellen...
Gruß
Carsten
Re: Globale Variablen
am 27.07.2006 10:19:30 von Sebastian Wessel
Carsten Wiedmann schrieb:
> Sebastian Wessel schrieb:
>
>> Mark Knochen schrieb:
>> > Nach Umstellung des Providers auf PHP 5 wird
>> > $text nicht mehr global erkannt.
>> > Lediglich die Verwendung der Variable $_POST['text']
>> > innerhalb der Funktion führt zu einer Ausgabe.
>> >
>> > Habe ich was verpasst bei der Anwendung von global ?
>>
>> Du darfst global nicht als "was" verstehen, sondern als "wo".
>> Nicht "was" du siehst legst du damit fest, sondern "wo" du es siehst.
>>
>> Nennt sich zwar beides "global", ist aber doch etwas Verschiedenes.
>
> Hm, hab leider nicht kapiert was du meinst. Kannst du das auch anders
> erklären?
Gerne.
Wie du hier bestimmt schon öfter gelesen hast, gibt es die Einstellung
"register_globals". Bei "on" können Variablen, die über POST oder GET
übermittelt wurden (frag mich jetzt bitte nicht nach den SERVER- und
ENV-Variablen) auch unter ihrem Schlüssel angesprochen werden.
$_GET['meine_variable'] kann dann auch unter $meine_variable
angesprochen werden etc.
Die andere "Globalität" bezieht sich auf die Gültigkeit der Variablen.
Innerhalb einer Funktion sind nur $_GET[], $_POST[], $_SESSION[],
$_SERVER[] und $_ENV[] bekannt (Schande über mich, falls ich etwas
vergessen haben sollte).
Zusätzlich sind die Variablen bekannt, die du über den Funktionskopf
"hereingereicht" oder über "global $var" bekannt gemacht hast.
Auf welchen Wert hast du denn "register_globals" eingestellt?
//////////
$i = 5;
function print_i1()
{
$i = 10;
echo $i;
}
print_i1();
echo $i;
//////////
Die Ausgabe würde lauten [Zeilenumbrüche angenommen :)]
10
5
Hast du dagegen
//////////
$i = 5;
function print_i2()
{
global $i;
$i = 10;
echo $i;
}
print_i2();
echo $i;
//////////
so lautet die Ausgabe
10
10
Ich hoffe, das war soweit verständlich :)
LG
Sebastian
Re: Globale Variablen
am 27.07.2006 11:10:30 von Carsten Wiedmann
Sebastian Wessel schrieb:
> Carsten Wiedmann schrieb:
> > Sebastian Wessel schrieb:
> >
> > > Du darfst global nicht als "was" verstehen, sondern als "wo".
> > > Nicht "was" du siehst legst du damit fest, sondern "wo" du es siehst.
> > >
> > > Nennt sich zwar beides "global", ist aber doch etwas Verschiedenes.
> >
> > Hm, hab leider nicht kapiert was du meinst. Kannst du das auch anders
> > erklären?
>
> Wie du hier bestimmt schon öfter gelesen hast, gibt es die Einstellung
> "register_globals". Bei "on" können Variablen, die über POST oder GET
> übermittelt wurden (frag mich jetzt bitte nicht nach den SERVER- und
> ENV-Variablen) auch unter ihrem Schlüssel angesprochen werden.
>
> $_GET['meine_variable'] kann dann auch unter $meine_variable angesprochen
> werden etc.
>
> Die andere "Globalität" bezieht sich auf die Gültigkeit der Variablen.
> Innerhalb einer Funktion sind nur $_GET[], $_POST[], $_SESSION[],
> $_SERVER[] und $_ENV[] bekannt (Schande über mich, falls ich etwas
> vergessen haben sollte).
Soweit klar. $_G/P/S usw. sind SuperGlobals und überall verfügbar. Im
"Hauptbereich" (global scope) des Scriptes definierte Variablen, oder die wo
über "register_globals=on" kommen, nur da und nicht innerhalb Funktionen.
> Zusätzlich sind die Variablen bekannt, die du über den Funktionskopf
> "hereingereicht" oder über "global $var" bekannt gemacht hast.
Das $GLOBALS-Array nicht vergessen.
> Auf welchen Wert hast du denn "register_globals" eingestellt?
Für den Test auf beides. Sollte bei dem Script vom OP aber egal sein.
> Hast du dagegen
>
> //////////
> $i = 5;
>
> function print_i2()
> {
> global $i;
> $i = 10;
> echo $i;
> }
> print_i2();
> echo $i;
> //////////
>
> so lautet die Ausgabe
> 10
> 10
Und jetzt die Frage: wo unterschiedet sich das zum Script vom OP?
> > > Mark Knochen schrieb:
> > > >
> > > > 1 function GetText()
> > > > 2 {
> > > > 3 global $text;
> > > > 4 echo $text;
> > > > 5 }
> > > > 6
> > > > 7 $text = $_GET['text']; //hier hab ich mal das POST gegen GET
> > > > getauscht.
> > > > 8 GetText();
Dieses Script rufen wir jetzt auf mit z.B.:
http://localhost/test.php?text=test
- In Zeile 7 wird der Variablen $text im global scope der Wert "test" aus
_GET['text'] zugewiesen.
- Zeile 8 ruft dann die Funktion GetText() auf. (den Namen sollte man
natürlich ändern)
- In Zeile 3 in der Funktion GetText() mach ich dann die globale Variable
$text innerhalb der Funktion verfügbar.
- In Zeile 4 in der Funktion GetText() gebe ich dann diese Variable $text
mit echo() aus. Also "test".
Also doch alles nach den Regeln. Und nachdem ich das theoretisch so
verstanden habe tut das auch bei einem praktischen Nachtest unter PHP4/5.
Wieso tut das dann beim OP nicht mit PHP5? Es sei denn, er hätte irgendwas
verschwiegen...
Gruß
Carsten
Re: Globale Variablen
am 27.07.2006 11:42:14 von Sebastian Wessel
Carsten Wiedmann schrieb:
> Also doch alles nach den Regeln. Und nachdem ich das theoretisch so
> verstanden habe tut das auch bei einem praktischen Nachtest unter PHP4/5.
Vergiss alles, was ich geschrieben habe.
Ich hatte die Zeile
> $text = $_GET['text'];
übersehen.
Das Script sollte soweit eigentlich funktionieren ...
> Wieso tut das dann beim OP nicht mit PHP5? Es sei denn, er hätte
> irgendwas verschwiegen...
anzunehmen ...
LG