PHP4 -> PHP5
Z.N.S.
- php
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.
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
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.
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