ID: 37153 Updated by: [EMAIL PROTECTED] Reported By: sirber at webernic dot com -Status: Open +Status: Bogus Bug Type: Unknown/Other Function Operating System: Linuix 2.6.13 PHP Version: 5.1.2 New Comment:
Sorry, but your problem does not imply a bug in PHP itself. For a list of more appropriate places to ask for help using PHP, please visit http://www.php.net/support.php as this bug system is not the appropriate forum for asking support questions. Due to the volume of reports we can not explain in detail here why your report is not a bug. The support channels will be able to provide an explanation for you. Thank you for your interest in PHP. Objects are always passed by reference in PHP-5. Previous Comments: ------------------------------------------------------------------------ [2006-04-21 13:39:27] martin at webernic dot com Same result with a copy of the array. Source array and the copy are modified. Reproduce code: --------------- $aTmp = array(); $oTmp = new stdClass(); $oTmp->id = 1; $aTmp[] = $oTmp; $oTmp = new stdClass(); $oTmp->id = 2; $aTmp3 = $aTmp foreach ($aTmp3 as $iKey => $oTest) $oTest->id = 'tea'; var_dump($aTmp, $aTmp3); Expected result: ---------------- array(2) { [0]=> object(stdClass)#1 (1) { ["id"]=> int(1) } [1]=> object(stdClass)#2 (1) { ["id"]=> int(2) } } array(2) { [0]=> object(stdClass)#1 (1) { ["id"]=> int(1) } [1]=> object(stdClass)#2 (1) { ["id"]=> int(2) } } Actual result: -------------- array(2) { [0]=> object(stdClass)#1 (1) { ["id"]=> string(3) "tea" } [1]=> object(stdClass)#2 (1) { ["id"]=> string(3) "tea" } } array(2) { [0]=> object(stdClass)#1 (1) { ["id"]=> string(3) "tea" } [1]=> object(stdClass)#2 (1) { ["id"]=> string(3) "tea" } } ------------------------------------------------------------------------ [2006-04-21 13:33:10] sirber at webernic dot com Description: ------------ When you foreach an array of object, if you modify the object, the source is modified. PHP4: work as expected PHP5 with compatibility on: work as expected PHP5: source gets modified Reproduce code: --------------- $aTmp = array(); $oTmp = new stdClass(); $oTmp->id = 1; $aTmp[] = $oTmp; $oTmp = new stdClass(); $oTmp->id = 2; $aTmp[] = $oTmp; $oTmp = new stdClass(); $oTmp->id = 3; $aTmp[] = $oTmp; $oTmp = new stdClass(); $oTmp->id = 4; $aTmp[] = $oTmp; foreach ($aTmp as $iKey => $oTest) $oTest->id = 'tea'; var_dump($aTmp); Expected result: ---------------- array(4) { [0]=> object(stdClass)#1 (1) { ["id"]=> int(1) } [1]=> object(stdClass)#2 (1) { ["id"]=> int(2) } [2]=> object(stdClass)#3 (1) { ["id"]=> int(3) } [3]=> object(stdClass)#4 (1) { ["id"]=> int(4) } } Actual result: -------------- array(4) { [0]=> object(stdClass)#1 (1) { ["id"]=> string(3) "tea" } [1]=> object(stdClass)#2 (1) { ["id"]=> string(3) "tea" } [2]=> object(stdClass)#3 (1) { ["id"]=> string(3) "tea" } [3]=> object(stdClass)#4 (1) { ["id"]=> string(3) "tea" } } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=37153&edit=1