ID: 44485 User updated by: computerlov at yahoo dot com Reported By: computerlov at yahoo dot com Status: Open Bug Type: Class/Object related Operating System: windows xp PHP Version: 5.2.5 New Comment:
I just noticed something you did wrong when reproducing the bug: the error is on the array we splice and not the output. for example: $arrInput = {$obj1, $obj2......} $arrOutput = array_splice($arrInput, .......); the problem is in $arrInput (which is passed by reference to array_splice) and not $arrOutput. Previous Comments: ------------------------------------------------------------------------ [2008-03-19 22:54:48] computerlov at yahoo dot com My complete example is a bit long. I'm basically creating an array of references to an object like so: $oEmptyObject = new CObject(NULL); $nMaxIndex = 64; for ($nCurIndex = 0; $nCurIndex < $nMaxIndex; ++$nCurIndex) { $this -> m_arrDailyObjects[0][$nCurIndex] = &$oEmptyObject; } on a different function i attempted to exchange the first two elements of the given array with one new CObject that actually contained data. I did it as followed: // this is an array containing all the objects with no particular order. $this -> m_arrObjects[count($this -> m_arrObjects)] = new CObject($arrFromDatabseData); // this is an array that saves the objects in a very specific order. array_splice($this -> m_arrDailyObjects[0], 0, 2, $this -> m_arrObjects[count($this -> m_arrObjects) - 1]); this resulted in the unexpected response. Note: I simplified a my code for a bit by replacing some loops and variables with literal indexes to keep it understandable without having to understand all my loops. CObject is a class with public and private methods, private data members, and of course a constructor, destructor. Nothing fancy. Let me know if you manage to reproduce it. ------------------------------------------------------------------------ [2008-03-19 21:34:28] [EMAIL PROTECTED] Please, send the complete example. I can't reproduce. <?php class CSomeClass { private $m_var1; private $m_var2; } $oSomeClass = new CSomeClass(); $arrObjects = array(); for ($i = 0; $i < 10; $i++) { $arrObjects[] = new stdClass; } var_dump(array_splice($arrObjects, 8, 2, $oSomeClass)); /* Output: array(2) { [0]=> object(stdClass)#10 (0) { } [1]=> object(stdClass)#11 (0) { } } */ ------------------------------------------------------------------------ [2008-03-19 20:58:43] computerlov at yahoo dot com Description: ------------ when doing something like this: $arrOfObjects = array($obj1, obj2....obj10); $oSomeObject = new CSomeClass(); array_splice($arrOfObjects, 8, 2, $oSomeObject); instead of getting an array of 9 objects, you get an array of 8 objects and all the data members of CSomeClass in the array. it's as if we kind of 'var_dumped' the object into the array instead of copying it to the array. Reproduce code: --------------- class CSomeClass { private $m_var1; private $m_var2; } ... $oSomeClass = new CSomeClass(); .. Do Stuff on $oSomeClass .. $arrObjects = ($obj1, $obj2); array_splice($arrObjects, 1, 1, $oSomeClass); Expected result: ---------------- $arrObjects = {$obj1, $obj2, $oSomeClass} Actual result: -------------- $arrObjects = {$obj1, $obj2, $m_var1, $m_var2} ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=44485&edit=1