ID: 44485
User updated by: computerlov at yahoo dot com
Reported By: computerlov at yahoo dot com
-Status: Feedback
+Status: Open
Bug Type: Class/Object related
Operating System: windows xp
PHP Version: 5.2.5
New Comment:
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.
Previous Comments:
------------------------------------------------------------------------
[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