Manuel B.: Include und Globals

Hi,

ich hab hier ein recht seltsames Problem mit zwei Klassen und GLOBALS
Ich binde eine Datei per include_once() in ein Script ein.
in dieser Datei steht ganz oben

include_once(__PATH__ . "/plugins/mp3database/classes/id3v1.class.php");
include_once(__PATH__ . "/plugins/mp3database/classes/id3v2.class.php");

$id3v1 = new ID3v1TAG;
$id3v2 = new ID3v2TAG;

Diese beiden Klassen lesen ID3 Tags aus MP3 Dateien aus. Nur wenn ich jetzt innerhalb einer Funktion auf die Objekte zugreifen will, sind diese nicht vorhanden. Weder mit global $id3v1, $id3v2; noch mit $GLOBALS

Wenn ich das Script aber direkt aufrufe, funktioniert die "Globalisierung" der Objekte. Ebenso funktioniert es, wenn ich o.g. Zeilen direkt innerhalb der Funktion schreibe.

Ich benutze PHP5.0.3 unter Sarge, selber kompiliert. Ist dass ein Bug in PHP5 oder ist das normal, das ich in einem Script, ads ich per include einbinde, keine Objekte erzeugen kann, die ich Global sichtbar machen kann?

Ich will natürlich nicht in jeder Funktion die Objekte ne Anlegen, vorallem, weil da einige rekursive Funktionen dabei sind.

thx4hlp

MfG
Manuel

  1. Hallo Manuel,

    warum übergibst du der Funktion die Objekte (oder Methoden, die du brauchst) nicht beim Aufruf.
    Das sollt auf jeden Fall funktionieren.
    Alles andere ist sonst Spekulation, wenn man sich den Quelltext nicht anschauen kann.

    Schönen Gruß aus München

    die knappschaft

    --

    sh:(  fo:|  ch:?  rl:°  br:$,<,>  n4:&  ie:|  mo:|  va:)  de:]  zu:)  fl:|  ss:|  ls:[,#
    1. Hi,

      warum übergibst du der Funktion die Objekte (oder Methoden, die du brauchst) nicht beim Aufruf.
      Das sollt auf jeden Fall funktionieren.

      Das ist mir klar, nur will ich einmal vermeiden, das ich sämtliche Aufrufe dieser Funktion ändern muss, und desweiteren will ich ja wissen, warum es so nicht funktioniert. Sympthome wegzudoktorn ist nicht ads, was ich will, ich will schon wissen, was die Ursache ist ;)

      Alles andere ist sonst Spekulation, wenn man sich den Quelltext nicht anschauen kann.

      Vesteh ich nicht, der relevante Quelltext ist da und ein Global innerhalb einer Funktion dürfte auch klar sein (hab aber nochmal was weiter oben gepostet).

      MfG
      Manuel

  2. echo $begrueszung;

    Ich binde eine Datei per include_once() in ein Script ein.

    Nur wenn ich jetzt innerhalb einer Funktion auf die Objekte zugreifen will, sind diese nicht vorhanden. Weder mit global $id3v1, $id3v2; noch mit $GLOBALS

    In welchem Kontext findet der Aufruf des include_once statt?

    echo "$verabschiedung $name";

    1. Hi,

      In welchem Kontext findet der Aufruf des include_once statt?

      <?
      include_once(__PATH__ . "/plugins/mp3database/classes/id3v1.class.php");
      include_once(__PATH__ . "/plugins/mp3database/classes/id3v2.class.php");

      $id3v1 = new ID3v1TAG;
      $id3v2 = new ID3v2TAG;

      function ausgabe(){
      global $id3v1,$id3v2; // diese Obejkte sind nicht lesbar, die sind leer
      }
      ?>

      und diese Datei wird eben auch über ein include() aufgerufen. Wenn ich diese Datei direkt aus dem Browser aufrufe, funktioniert alles, wenn ich die Datei aufrufe, die diese Datei includet, funktionierts nicht.
      Leider kann ich unter PHP4 nicht testen, da die Software im Moment nur unter PHP5 lauffähig ist.

      MfG
      Manuel

      1. echo $begrueszung;

        In welchem Kontext findet der Aufruf des include_once statt?

        [...]

        und diese Datei wird eben auch über ein include() aufgerufen.

        Ja, und genau diesen Aufruf meinte ich, das was du eben gezeigt hast, wusste ich ja schon. :-) Ein bisschen stärker mit dem Zaunspfahl gewunken: Steckt dieser Aufruf vielleicht in einer Funktion drin?

        PHP-Manual zu include - die beiden Abschnitte vor und nach Beispiel 16-3 könnten interessant sein.

        echo "$verabschiedung $name";

        1. Hi,

          Ja, und genau diesen Aufruf meinte ich, das was du eben gezeigt hast, wusste ich ja schon. :-) Ein bisschen stärker mit dem Zaunspfahl gewunken: Steckt dieser Aufruf vielleicht in einer Funktion drin?

          Genau das wars. Daran hab ich überhaupt nicht gedacht und deshalb nicht ins Manual geschaut. Asche auf mein Haupt.

          jetzt hab ich einfach

          include_once(__PATH__ . "/plugins/mp3database/classes/id3v1.class.php");
          include_once(__PATH__ . "/plugins/mp3database/classes/id3v2.class.php");

          global $id3v1;
          global $id3v2;

          $id3v1 = new ID3v1TAG;
          $id3v2 = new ID3v2TAG;

          gemacht, und schon kann ich die Objekte in anderen Funktionen sichtbar machen. Danke für den Hinweis

          MfG
          Manuel