Timo: Kann auf Variablen nicht zugreifen

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

  1. 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.

    --
    Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
    Zufällige Hinweise:
    ------------------------
    Wissen ist gut, Können ist besser, aber das Beste und Interessanteste ist der Weg dahin! (Gernot Back)
    1. 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

      1. 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

        1. 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

          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

          1. 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

    2. 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

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. 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.

        --
        Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
        Zufällige Hinweise:
        ------------------------
        Antworten per E-Mail gibts hier nicht!
        1. 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

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
  2. 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.