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

Reply via email to