|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2003-09-11 04:22 UTC] nick at itomic dot com
[2003-09-11 10:12 UTC] sniper@php.net
[2003-09-18 06:02 UTC] sniper@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Nov 02 21:00:02 2025 UTC |
Description: ------------ when a class function accepts a reference parameter & stores that reference in the object, if that parameter passed in is created & recreated inside a loop, then the reference that the class points to changes to the last value of the parameter in the loop. This is confusing behavious, but it is not necessary buggy behavious no PHP's behalf, maybe it just requires better documentation. I can see the situation where an object needs to be passed a reference to an object, _not_ a copy of a reference (i.e. when dealing with obbject trees, or lists). In the below example this may differ from when I am passing in some pre-existing variable (i.e. a variable returned from a class iterator), rather than a variable that is created in the loop Reproduce code: --------------- <?php // plz note this is pseudo code $res = mysql_query(...); // this part of the code has been tested while ($row = mysql_fetch_assoc($res)) { $foos[] =& new foo($row); } foreach($foos as $key => $foo) { var_dump($foos[$key]->_var); } class foo { var $_var = NULL; function foo(&$var) { $this->_var =& $var; } } Expected result: ---------------- something like: array(2) { ["StageID"]=> string(1) "1" ["StageName"]=> string(10) "Incomplete" } array(2) { ["StageID"]=> string(1) "2" ["StageName"]=> string(8) "Complete" } array(2) { ["StageID"]=> string(1) "3" ["StageName"]=> string(10) "Not Needed" } array(2) { ["StageID"]=> string(1) "4" ["StageName"]=> string(7) "Waiting" } array(2) { ["StageID"]=> string(1) "5" ["StageName"]=> string(9) "Submitted" } Actual result: -------------- bool(false) bool(false) bool(false) bool(false) bool(false)