Problem mit globalen Variablen



  • Eigentlich dachte ich, dass mir ein Problem der folgenden Art nie wieder in PHP begegnen würde. Doch erstens kommt es immer anders und zweitens als man denkt. Ich möchte eigentlich nur auf eine globale Variable zugreifen. Der zugreifende Code befindet sich dabei in einer Klasse.

    $einevariable = "bla3443";
    
    class mod_basket
    {	
    	function action(&$template, $db_conn)
    	{
    		global $einevariable;
    		echo $einevariable;
    	}
    }
    

    Statt der erwarteten Ausgabe von "bla3443" kommt überhaupt gar nichts. Und das obwohl ich $einevariable ausdrücklich als global gekennzeichnet habe. Was mache ich nun falsch?



  • Ich weiß nicht, ob du das willst, aber du könntest mal versuchen über $GLOBALS['einevariable'] darauf zuzugreifen 🙂



  • Funktioniert leider auch nicht...
    Erst wenn ich $GLOBALS['einevariable'] explizit einen Wert zuweise oder als GET-Parameter an das Script übergebe, dann funktioniert auch der Zugriff über $GLOBALS in der Klasse. register_globals ist auf On gestellt (Hat ja eigentlich nichts mit dem Problem zutun).



  • Hat nicht jemand noch einen Vorschlag?



  • Ich hab mich mal deinem Problem angenommen und folgendes hat sich herausgestellt:

    $einevariable = "bla3443";
    
    class mod_basket 
    {    
        function action() 
        { 
            global $einevariable; 
            echo $einevariable; 
        } 
    }
    // minimaler code um die methode aufzurufen
    $mod = new mod_basket();
    $mod->action();
    

    Dieser Code gibt "bla3443" aus. Ich hab auch probiert das Script mit "register_globals" auf On und einem GET-Parameter aufzurufen (/script.php?einevariable=hallo): es wird "hallo" ausgegeben. Bei diesem Test hab ich natürlich die erste Zeile im Script auskommentiert.

    Führ mal den selben Code aus, und sag mir Bescheid welches Ergebnis du erhältst.



  • Ich habe das Problem jetzt mittels eines Singletons in PHP5 gelöst, da die globale Variable jetzt sowieso eine Instanz einer Klasse ist. Danke trotzdem für alle Antworten...



  • Hast du die Klasse in einer Funktion inkludiert (z.b. __autoload)?
    Dann ist deine Variable nicht global sichtbar, sondern nur innerhalb dieser Funktion.
    Das kannst du z.b. umgehen, indem du $GLOBALS['einevariable']=foo schreibst.
    Aber nun hast du es ja schon anders geleost.

    gruss


Anmelden zum Antworten