ID: 50000
Updated by: [email protected]
Reported By: chris42 dot b at googlemail dot com
-Status: Open
+Status: Assigned
Bug Type: SPL related
Operating System: windows xp
PHP Version: 5.2SVN-2009-10-26 (snap)
-Assigned To:
+Assigned To: colder
Previous Comments:
------------------------------------------------------------------------
[2009-10-26 13:46:47] chris42 dot b at googlemail dot com
Description:
------------
In test file array_022.phpt we see the clone being changed but this
does not change original, If you clone an ArrayIterator you also clone
its reference.
If you take such a self-wrapping ArrayIterator and clone it, the clone
is no longer self-wrapping: the clone wraps the original. HOWEVER, I
*think* the SPL_ARRAY_IS_SELF flag is being copied to the clone
Therefore, the clone starts to store/retrieve data from itself rather
than from its wrapped container - hence the difference.
Reproduce code:
---------------
<?php
class MyArrayIterator extends ArrayIterator
{
public function __construct()
{
parent::__construct($this);
$this['bar'] = 'baz';
}
}
$a = new MyArrayIterator;
$b = clone $a;
$b['baz'] = 'Foo';
var_dump($a);
var_dump($b);
?>
Expected result:
----------------
object(MyArrayIterator)#%d (2) {
["bar"]=>
string(3) "baz"
["baz"]=>
string(3) "Foo"
}
object(MyArrayIterator)#%d (2) {
["bar"]=>
string(3) "baz"
["baz"]=>
string(3) "Foo"
}
Actual result:
--------------
object(MyArrayIterator)#%d (1) {
["bar"]=>
string(3) "baz"
}
object(MyArrayIterator)#%d (2) {
["bar"]=>
string(3) "baz"
["baz"]=>
string(3) "Foo"
}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=50000&edit=1