Kann auf Variablen nicht zugreifen
Timo
- php
Hallo,
ich habe eine Datei die ich mittels include("variablen.php") in eine andere Datei (main.php) includiere. In der Datei stehen Variablen drin, Servername, Datenbankname und Datenbankpasswort.
Zusätzlich includiere ich noch eine Datei in die main.php, die Funktionen beinhaltet, unter anderem eine, die mich zu einer Datenbank verbindet.
Warum kann ich aus den Funktionen nicht auf die Variablen der Datei variablen.php zugreifen.
Benutze ich in den Funktionen global $foo, dann funktionierts das will ich aber eigentlich umgehen.
mfg
Timo
Hi Timo,
Warum kann ich aus den Funktionen nicht auf die Variablen der Datei variablen.php zugreifen?
Nun, so ist eben einfach das Standardkonzept in PHP. Nur die superglobalen Arrays $_POST, $_GET, $_REQUEST, $_SERVER, $_COOKIE (warn das alle?) stehen in funktionen direkt zur Verfügung.
Alles andere musst du dir entweder über global holen oder als Parameter übergeben.
Benutze ich in den Funktionen global $foo, dann funktionierts das will ich aber eigentlich umgehen.
Tipp: Packe doch alle definierten Variablen in ein Array und übergieb dieses als Funktionsparameter (z.B. $_configs oder so).
MfG, Dennis.
Nun, so ist eben einfach das Standardkonzept in PHP. Nur die superglobalen Arrays $_POST, $_GET, $_REQUEST, $_SERVER, $_COOKIE (warn das alle?) stehen in funktionen direkt zur Verfügung.
$_SESSION
Tipp: Packe doch alle definierten Variablen in ein Array und übergieb dieses als Funktionsparameter (z.B. $_configs oder so).
was ist wenn ich define benutze?
mfg
Johannes
Hallo Johannes,
Nun, so ist eben einfach das Standardkonzept in PHP. Nur die superglobalen Arrays $_POST, $_GET, $_REQUEST, $_SERVER, $_COOKIE (warn das alle?) stehen in funktionen direkt zur Verfügung.
$_SESSION
Tipp: Packe doch alle definierten Variablen in ein Array und übergieb dieses als Funktionsparameter (z.B. $_configs oder so).
was ist wenn ich define benutze?
dann hast du keine Variablen mehr sondern Konstanten - was im Falle von Konfigurationsdaten imho auch nicht falsch ist.
Grüße aus Nürnberg
Tobias
Hallo,
leider habe ich die Dateien hier gerade nicht vorliegen, deshalb kann ich das schlecht testen, aber eventuell weiß es ja jemand aus dem Kopf.
Nun, so ist eben einfach das Standardkonzept in PHP. Nur die superglobalen Arrays $_POST, $_GET, $_REQUEST, $_SERVER, $_COOKIE (warn das alle?) stehen in funktionen direkt zur Verfügung.
$_SESSION
- $GLOBALS, $_ENV, $_FILES siehe http://de2.php.net/language.variables.predefined
Verwende ich $GLOBALS wie z.B. $_SESSION? Kann ich also die Variablen so definieren $GLOBALS['foo'] und ich habe sie in den Funktionen zur Verfügung?
dann hast du keine Variablen mehr sondern Konstanten - was im Falle von Konfigurationsdaten imho auch nicht falsch ist.
denke auch das es OK wäre, habe ich die Konstanten dann zur Verfügung in den Funktionen, oder verhalten diese sich nicht anders als Variablen?
mfg
Johannes
Hallo Johannes,
Verwende ich $GLOBALS wie z.B. $_SESSION? Kann ich also die Variablen so definieren $GLOBALS['foo'] und ich habe sie in den Funktionen zur Verfügung?
ja, ein:
$var = 'foo';
function bar(){
return $GLOBALS['var'];
}
echo bar();
gibt »foo« aus.
dann hast du keine Variablen mehr sondern Konstanten - was im Falle von Konfigurationsdaten imho auch nicht falsch ist.
denke auch das es OK wäre, habe ich die Konstanten dann zur Verfügung in den Funktionen,
ja: http://de3.php.net/language.constants (unter dem 1. Beispiel)
Grüße aus Nürnberg
Tobias
Hello,
selbstverständlich kann er innerhalb der Funktion auf die Werte zugreifen, wenn er sie denn beim Aufruf der Funktion auch übergibt!
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi Tom,
selbstverständlich kann er innerhalb der Funktion auf die Werte zugreifen, wenn er sie denn beim Aufruf der Funktion auch übergibt!
ähm, worauf willst du hinaus? Das meinte ich doch mit "Funktionsparameter"....
MfG, Dennis.
Hello,
uups,
selbstverständlich kann er innerhalb der Funktion auf die Werte zugreifen, wenn er sie denn beim Aufruf der Funktion auch übergibt!
ähm, worauf willst du hinaus? Das meinte ich doch mit "Funktionsparameter"....
Entschuldige bitte, das hatte ich glatt übersehen:
" ... oder als Parameter übergeben."
Das ist dann mMn auch allen anderen Möglichkeiten zu bevorzugen, auch wenn faule Leute das gerne unterlassen. Aber erst durch vollständige Parameterübergabe aller benötigter Werte und Referenzen werden Funktionen allgemein verwendbar.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
warum das nicht geht, kann ich dir auch nicht genau sagen.
könnte an der reihenfolge der inlcudes liegen. du solltest erst die definitionen includen, dann die funktionen.
bin mir aber nicht sicher, ob das überhaubt so geht.
aber übergib die variablen doch einfach als funktionsparameter.
das geht.
was auch geht, ist die "variablen" als konstanten per define() zu definieren und dann überall vor der benutzung zu includen.
ich mache das genau so. auch mit datenbank zugangsdaten. darauf können funktionen dann auf jeden fall zugreifen, weiss aber nicht, ob das dann schon als global gilt.
das geht natürlich nicht, wenn die zugangsdaten wirklich variabel sein sollen.