PHP 4.0 Bug #9481 Updated: Passing out class property by reference problem

From: Date: Thu, 08 Mar 2001 15:29:03 +0000
Subject: PHP 4.0 Bug #9481 Updated: Passing out class property by reference problem
Groups: php.dev 
Request: Send a blank email to php-dev+get-48268@lists.php.net to get a copy of this message
ID: 9481 User Update by: phil@kusala.com Status: Closed Bug Type: Scripting Engine problem Description: Passing out class property by reference problem You can get round the above problem somewhat using: function foo (&$aVar) { $aVar['value'] =& $GLOBALS["baz"]; } foo($bar); $bar['value'] is now a reference to $GLOBALS["baz"] as you would expect. Previous Comments: --------------------------------------------------------------------------- [2001-03-08 06:58:36] stas@php.net This is not a bug. Please read the "References explained" part in the manual. When you have $a =& $b and you do $a =& $c, you don't make a and b be references to c, you make only $a bound to $c and unbound from $b. So when you did $refObj = &$this->sValue $refObj stopped being reference to call parameter and became reference to $this->sValue. There's no real way to make "other" referenced value to be rebound to some new value. --------------------------------------------------------------------------- [2001-02-27 10:42:34] phil@kusala.com <? function xmpdump($xValue, $sLabel="") { echo "$sLabel<xmp>"; var_dump($xValue); echo "</xmp>"; } class test { var $sValue; var $Count = 0; function getTest(&$refObj) { if (isset($this->sValue)) { $refObj = &$this->sValue; xmpdump($refObj, "Reference before being passed back"); return; } else { $refObj = "phil".$this->Count; $this->Count++; $this->sValue = &$refObj; xmpdump($refObj, "Value before being passed back"); return; } } } $tst = new test(); $tst->getTest($tstObj0); xmpdump($tstObj0, "Value after being passed back"); $tst->getTest($tstObj1); xmpdump($tstObj1, "Refence after being passed back"); ?> The dump of $tstObj1 is NULL, despite the dump of $refObj immediately before it in the function working correctly. --------------------------------------------------------------------------- Full Bug description available at: http://bugs.php.net/?id=9481

« previous php.dev (#48268) next »