phpbar.de logo

Mailinglisten-Archive

[php] problem mit referenz seit umstellung auf php5

[php] problem mit referenz seit umstellung auf php5

Yannik Hampe yannik at cipher-code.de
Fre Jun 29 13:24:08 CEST 2007



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