Mailinglisten-Archive |
LB BL wrote: > hallo zusammen, > > seit ich unsere seiten auf php5 teste, hab ich bei folgendem konstrukt ein problem und bin mir unsicher wieso, und suche nach einer lösung: > > class A extends Smarty > { > > } > > class B > { > function B(&$classAobject) > { > B::setObject($classAobject, "A"); > > } > > function setObject(&$obj, $name) > { > //speichert objectreferenz in klassenvariable (array) > } > > function &getObject($name) > { > //gibt gespeicherte objectreferenz zurück > } > > function() foo > { > classAobject = B::getObject("A"); > classAobject->assign("var", "value"); > > //testausgabe > print_r(classAobject->get_template_vars()); > //ok! > > //rufe dyn. funktion auf (funktion (keine methode) ist in eigener datei notiert) > call_user_func("bsp_function.php", &$classAobject); > > //testausgabe > print_r(classAobject->get_template_vars()); > //nicht ok! > //var2 ist nicht gespeichert worden in classAobject! dies ging noch in php4 > } > } > > > function bsp_function(&$classAobject) > { > $classAobject->assign("var2", "value2"); > } > > //// > also das problem ist, dass eine zuweisung eines werts mit Hilfe des referenzierten $classAobject's innerhalb der funktion bsp_function nicht gespeichert wird im objekt. mit php4 ging das noch. > hat jemand ne ahnung wo der "fehler" liegt? Ich habe noch nie versucht das in php5 so zu machen, was wahrscheinlich damit zusammenhängt, dass ich in php4 nie OOP gemacht habe. Aber ich weiss etwas von dem theoretischen Hintergrund: In php4 war ein Objekt eigentlich ein assoziativer Array. Also intern für die php-Engine. Die Funktionen waren normale Funktionen, nur, dass wenn du sie aufgerufen hast $this klamm und heimlich im ersten Parameter übergeben wurde. Daher musste man in php4 ständig Referenzen benutzen, weil die Objekte ja eigentlich keien waren. In php5 wurde dann das Obejktekonzept kompeltt überarbeited, so, dass die Objekte keine assoziativen Arrays mehr sind, sondern wirklich, wie sich das gehört Objekte. Und Objekte sind ja bereits Pointer, daher kannst du dir in php5 die ganze Referenziererei sparen. Probier's mal ohne die &... > > danke für eure hilfe! > > gruß lars Yannik
php::bar PHP Wiki - Listenarchive