Geltungsbereich Variablen
Powl
- php
Hallo,
Ich habe ein Verständnisproblem mit dem Geltungsbereich von Variablen in PHP.
Folgendes Scenario:
Funktion main ruft Funktion sub1 auf.
sub eins berechnet varA und varB und kehrt mit return zu main zurück
main ruft Funktion sub2 auf
sub2 soll mit varA und varB arbeiten und varC bestimmen
sub2 soll varC an main übergeben.
Da stehe ich irgendwie völlig auf dem Schlauch. Mit global funktioniert das irgendwie nicht wie gewünscht.
Muß ich die Variablen in das Array GLOBALS schreiben, um sie global verfügbar zu machen, oder wie kann das gehen?
netten Tag
^da Powl
Hi Powl!
Funktion main ruft Funktion sub1 auf.
sub eins berechnet varA und varB und kehrt mit return zu main zurück
main ruft Funktion sub2 auf
sub2 soll mit varA und varB arbeiten und varC bestimmen
sub2 soll varC an main übergeben.
Mal global, mal lokal. Was denn nun?
Und was ist die main-Funktion? Wo wird sie aufgerufen? [1]
Da stehe ich irgendwie völlig auf dem Schlauch. Mit global funktioniert das irgendwie nicht wie gewünscht.
Was heißt "funktioniert nicht"?
Muß ich die Variablen in das Array GLOBALS schreiben, um sie global verfügbar zu machen, oder wie kann das gehen?
Globale Variablen definiert man für gewöhnlich einfach global. =)
[1] Oder kann man sie wie in C benutzen?
MfG H☼psel
Hi !
Folgendes Scenario:
Funktion main ruft Funktion sub1 auf.
sub eins berechnet varA und varB und kehrt mit return zu main zurück
main ruft Funktion sub2 auf
sub2 soll mit varA und varB arbeiten und varC bestimmen
sub2 soll varC an main übergeben.Da stehe ich irgendwie völlig auf dem Schlauch. Mit global funktioniert das irgendwie nicht wie gewünscht.
Muß ich die Variablen in das Array GLOBALS schreiben, um sie global verfügbar zu machen, oder wie kann das gehen?
Tja, wie ruft main die Funktion sub1 auf?
sub1() mit A,B als globalen Variablen
oder
sub1(A,B) ?
Ist der Aufruf sub1(A,B) ein
"Call bei value" -> Es wird nur eine Kopie der Variablen übergeben, die Inhalte ändern sich nach Beendigung von sub1 nicht
oder ein
"Call bei reference" -> Es wird ein Zeiger auf die Adresse von A und B übergeben und wenn sub1 diese ändert, sind A und B auch innerhalb main() geändert.
Gruß
Hans
Hallo,
"Call bei reference" -> Es wird ein Zeiger auf die Adresse von A und B übergeben und wenn sub1 diese ändert, sind A und B auch innerhalb main() geändert.
Das scheint mir der zutreffende Fall zu sein.
Also müßte ich in Funktion main() sub1 wie folgt aufrufen, oder?
&sub1(varA, varB);
Werden die Varablen dann automatisch zurückgegeben, oder müßte ich sie über return explizit and die main Funktion übergegeben?
Noch eine Frage. Kann man innerhalb einer Funktion auch mittels
global $varNEU;
eine Variable als globale neu einführen, oder muß sie schon außerhalb von Funktionen angelegt worden sein?
Netten Tag
^da Powl
echo $begrüßung;
Noch eine Frage. Kann man innerhalb einer Funktion auch mittels
global $varNEU;
eine Variable als globale neu einführen, oder muß sie schon außerhalb von Funktionen angelegt worden sein?
Wenn du das unbedingt so machen möchtest, probier das doch einfach mit einem kleinen Test-Script aus. In der Zeit, in der du die Frage formulierst und auf Antwort wartest, hast du das Ergebnis auch selbst herausgefunden.
Generell sollten Funktionen eigenständig arbeiten. Aus den übergebenen Parametern erzeugen sie ein Ergebnis. Lesender und schreibender Zugriff auf globale Variablen ist schlechter Stil und trägt nicht gerade zu ihrer Wiederverwendbarkeit bei.
Wenn du Werte hast, die mehreren Funktionen zur Verfügung stehen sollen, und diese Funktionen und Variablen mehr oder weniger eine Einheit bilden, könntest du über die Verwendung einer Klasse nachdenken.
echo "$verabschiedung $name";