frage über klassen

heyho

als ich letztens ne seite für nen freund geschrieben hab hab ich die zu hause unter php 5.2 entwickelt, bei ihm auf dem server arbeitet allerdings php 4.4.8

ich das also einfach mal hochgeschaufelt und mit einem problem zu kämpfen gehabt was keinen fehler produziert hat, sondern schlicht anders funktionierte.

um das mal zu zeigen hab ich folgenden code gebastelt:

PHP:
<?php
    
    class hauptklasse {
        function hauptklasse() {
            //nebenklasse bekommt das nebennebenklasse objekt eingefügt!
            $nk = new nebenklasse();
            $nnk = new nebennebenklasse();
            
            //hier rein damit
            $nk->obj = $nnk;
            //funktion ausführen, die in der nebenklassen in der dritten klasse ne variable über eine funktion ändert
            $nk->setzen();
            //anschliessend den status abfragen
            $nnk->status();
        }
    }
    
    class nebenklasse {
        
        var $obj;
        
        function setzen() {
            $this->obj->setzDieVariable();
        }
    }
    
    class nebennebenklasse {
        
        var $setzmich = "ich stehe noch";
        
        function setzDieVariable() {
            $this->setzmich = "setz dich auf den stuhl!";
        }
        
        function status() {
            echo $this->setzmich;
        }
    }
    
    new hauptklasse();
?>

unter php 5 kommt das von mir erwartete ergebnis
Code:
setz dich auf den stuhl!

auf dem webserver mit php 4.4.8 dagegen folgendes:

Code:
ich stehe noch

nach meinem verständnis behinhaltet doch nach der anweisung

PHP:
$var = new obj();

die variabel $var einen pointer auf das objekt, wenn ich diesen pointer nun kopiere, hab ich doch aber noch immer das selbe objekt, auf welches gezeigt wird.
das stimmt soweit auch unter php5 aber unter php4 wird scheinbar das ganze objekt kopiert?

kann mir das jemand erklären?
 
In PHP4 werden Objekte immer kopiert und nicht referenziert, in PHP5 wird dagegen das Objekt referenziert und kann nur über den clone-Operator kopiert werden. Um in PHP4 eine Referenz auf ein Objekt zu bekommen, musst Du mit dem &-Operator arbeiten.

PHP:
$nk->obj = &$nnk;
 
Zurück
Oben