Klassen referenz



  • Wie kann ich am Besten eine Referenz auf eine bestimmte klasse setzen, die ich über eine Variable aufrufe.

    z.B. Das Ganze kann ich mir gar nicht erklären...?!!

    <?php
    
    	//$_p = new test(); # wenn diese zeile dekommentiert ist, klappt alles
    
    	class test
    	{
    		var $var = "Eins";
    
    		function test(){
    			global $_p;
    			$_p = &$this;
    
    		}
    
    		function _do(){
    			$this->var = "Zwei";
    		}
    
    		function out(){
    			echo $this->var;
    		}
    	}
    
    	//$la = new test();
    	new test();
    
    	$_p->_do();
    	$_p->out();	// Fehler (wenn dekommentiert)
    ?>
    


  • Eine genauere Fehlermeldung wäre hilfreich. Wozu brauchst du hier Referenzen? Wichtig wäre auch zu wissen, ob du PHP 4, 5 oder 6 verwendest.

    PS: es heißt "auskommentieren", nicht "dekommentieren"



  • Nimm mal das "&" vor dem $this weg. $this ist ja bereits ein Zeiger.



  • Nimm mal das "&" vor dem $this weg. $this ist ja bereits ein Zeiger.

    das ist schon richtig, dennoch behandelt das PHP anders, wenn $t = $p, dann wird in $t das gespeichert, was unter $p zu finden ist(egal, ob referenz oder direct das objekt).

    Wenn man $GLOBALS['_p'] nutzt funktioniert es!!



  • ich bin mir nicht sicher, ob ich das problem hier verstanden habe, aber ich versuchs mal...

    //$_p = new test(); # wenn diese zeile dekommentiert ist, klappt alles
    // die obige Zeile ist auskommentiert, d.h. $_p ist nirgends bekannt und du
    // arbeitest ja weiter unten damit, was also nicht gehen kann. Ebenso arbeitest du in der Klasse selbst damit, was auch nicht gehen kann.
    
        class test
        {
            var $var = "Eins";
    
            function test(){
                global $_p;
                $_p = &$this;
    
            }
    
            function _do(){
                $this->var = "Zwei";
            }
    
            function out(){
                echo $this->var;
            }
        }
    
        //$la = new test();
        new test();
    
        $_p->_do();
        $_p->out();    // Fehler (wenn dekommentiert)
    

Anmelden zum Antworten