|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2008-03-19 20:58 UTC] 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}
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 12:00:01 2025 UTC |
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) { } } */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.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.