Seite 1 von 1
globale Variablen in Funktionen
Verfasst: 09.04.2006 19:08
von mgutt
1.
Ich habe eine Datei "calendar". Diese includiert eine "sessions" und eine "functions_calendar".
2.
Dann habe ich eine Datei "viewforum". Diese includiert die "sessions" ebenfalls.
Problem:
Bisher konnte ich mit der Eigenschaft "global" eine Variable mit in eine Funktion übernehmen. Aber im 1. Punkt geht das nicht.
Beispiel:
Wenn ich "$foo" in "viewforum" generiere, kann ich Sie mit "global $foo" in "sessions" innerhalb der Funktion "append_sid" aufrufen. (laut 2.)
Wenn ich aber "$foo" in "functions_calendar" generiere (innerhalb einer dortigen Funktion), kann ich sie in der Datei "sessions" nicht aufrufen, obwohl die in "functions_calendar" aufgerufene Funktion "append_sid" aus der "sessions" funktioniert.
Was genau mache ich falsch? Muss man die Variable anderweitig "globaler" machen?
Verfasst: 09.04.2006 20:49
von S2B
Wenn du eine Variable in einer Funktion deklarierst, kannst du sie außerhalb dieser Funktion nur verwenden, wenn du sie per return an eine Variable übergibst oder
Verweis-Parameter verwendest.
Verfasst: 09.04.2006 22:56
von mgutt
return verstehe ich. Aber return beendet doch sofort die laufende Funktion. Das will ich ja nicht.
Innerhalb der Funktion wird eine beliebige Variable generiert. Wir mache ich sie so global, dass ich sie in einer weiteren Funktion als global wieder aufrufen kann?
Ich dabei keinen Einfluss auf den Funktionsaufruf nehmen. Sonst könnte ich auch einfach die Variable als Parameter an die andere Funktion übergeben. Da ich aber bisher nur mit globalen Variablen gearbeitet habe, weil es einfach ist, wollte ich das auch so belassen.
Gibt es noch etwas anderes als "return" um eine Variable außerhalb der bestehenden Funktion zu globalisieren?
Verfasst: 10.04.2006 14:45
von S2B
s.o.

Verfasst: 10.04.2006 15:43
von mgutt
Ich verstehe es im Moment leider nicht ganz. Aber mal ein Beispiel wie die Dateien im Moment angeordnet sein müssten:
sessions.php:
Code: Alles auswählen
function append_sid($url='')
{
global $foo, $bar;
return $foo . $bar . '-' . $url;
}
functions_calendar.php
Code: Alles auswählen
function calendar_sid($url='')
{
$bar = 'calendar';
return append_sid($url);
}
calendar.php:
Code: Alles auswählen
include('sessions.php');
include('functions_calendar.php');
$foo = 'test';
echo ('1. Ergebnis: <br />');
echo append_sid('append.php');
echo ('<br />2. Ergebnis: <br />');
echo calendar_sid('calendar.php');
Ergebnis:
1. Ergebnis:
test-append.php
2. Ergebnis:
test-calendar.php
Gewollt wäre aber:
1. Ergebnis:
test-append.php
2. Ergebnis:
calendar-calendar.php
Ich könnte natürlich die Funktion erweitern, in dem der "append_sid" einen weiteren Parameter anhänge und beim Aufrufen in der Funktion einfach das mache:
Dazu suche ich aber eine Alternative, wenn möglich.
Verfasst: 10.04.2006 16:04
von S2B
Schau dir mal diese Seite an:
Geltungsbereich von Variablen. Wahrscheinlich sollte das $GLOBALS-Array etwas für dich sein. Ob die Verwendung dieses Arrays allerdings empfohlen wird, habe ich im Moment leider nicht im Kopf. Auf jeden Fall steht nichts im entsprechenden Kapitel des Manuals...
Verfasst: 10.04.2006 16:12
von mgutt
Ich habe es raus. Man muss innerhalb der Funktion die Variable auch global "machen".
Ich dachte "global" würde nur global auf Variablen zugreifen. Aber es macht diese auch gleichzeitig global.
Also in functions_calendar.php wäre es einfach so
Code: Alles auswählen
function calendar_sid($url='')
{
global $bar;
$bar = 'calendar';
return append_sid($url);
}