globale Variablen in Funktionen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

globale Variablen in Funktionen

Beitrag 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?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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.
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag 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?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

s.o. :-?
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag 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:

Code: Alles auswählen

return append_sid($url, $bar);
Dazu suche ich aber eine Alternative, wenn möglich.
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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...
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag 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); 
} 
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Antworten

Zurück zu „Coding & Technik“