Z.N.S.: PHP4 -> PHP5

abend,

ich habe mir folgendes Klassenkontrukt unter PHP5 gebaut.

MainClass {
 var $data;
 var $helper;
 function MainClass() {
   $this->data = array();
   $this->helper = new HelperClass( $this );
   $this->addData();
 }
 function addData() {
   $this->helper->addDataToArr()
   print_r( $this->data );
 }
}

HelperClass {
  var MainClassObject;
  function HelperClass( $obj ) {
    $this->MainClassObject = obj;
  }
  function addDataToArr() {
    $this->MainClassObj->data['key'] = 'val';
  }
}
es liefert mir - wie erwünscht - den erweiterten array $data.
Nun habe ich das unter PHP4 laufen und musste mit Entsetzen feststellen,
dass der Array $data sich nicht aus der HelperClass heruas aktualisieren
lässt.
Liegt das evtl. an dem "new Class( $this )", ist das noch nicht in PHP4
implementiert oder gibt es einen Workaround dafür?

Besten Dank

mfg,
(tanz das)
Z.N.S.

--
<img src="http://www.dmp-web.de/comunicout/neubauten.gif" border="0" alt="">
  1. abend,

    moin,

    abgesehen davon, dass du x schreibfehler drin hattest, lag das problem an der zuweisung des übergebenen objektes. du musst in dem fall immer explizit mit referenzena arbeiten, da sonst geklont wird.

    so gehts:

    <?php
    class MainClass {
     var $data;
     var $helper;
     var $id;

    function MainClass() {
       $this->data = array();
       $this->helper = & new HelperClass( & $this ); //referenz übergeben
       $this->addData();
     }
     function addData() {
       $this->helper->addDataToArr();
       print_r($this->data);
     }
    }

    class HelperClass {
      var $mainClassObject;
      function HelperClass( $obj ) {
        $this->mainClassObject = & $obj; //referenz übergeben
      }
      function addDataToArr() {
        $this->mainClassObject->data['key'] = 'val';
      }
    }

    $mc = & new MainClass();
    ?>

    viele grüsse,
    andi

    1. abend,

      abgesehen davon, dass du x schreibfehler drin hattest,

      das war mir schon klar. hatte es nur zu eilig ;)

      lag das problem an der zuweisung des übergebenen objektes.

      wie ich es mir dachte.

      $this->helper = & new HelperClass( & $this );

      ..und ich hatte es bereits an etlichen stellen mit dem "&"
      versucht gehabt. nur nicht bei dem "this" ;-(

      Besten Dank. Es funktioniert jetzt alles wieder.

      PS: warum entfällt das mit den referenzen unter php5?

      mfg,
      (tanz das)
      Z.N.S.

      --
      <img src="http://www.dmp-web.de/comunicout/neubauten.gif" border="0" alt="">
      1. PS: warum entfällt das mit den referenzen unter php5?

        bei php5 werden objekte (endlich) standardmässig per referenz übergeben. bei der 4 eben durch kopie. willst du das bei der 5 machen, musst du clone() benutzen.

        grüsse,
        andi