ID: 49999
Updated by: [email protected]
Reported By: christopheb156 at hotmail dot com
-Status: Open
+Status: Bogus
Bug Type: SPL related
Operating System: windows xp
PHP Version: 5.2SVN-2009-10-26 (snap)
New Comment:
Please do not submit the same bug more than once. An existing
bug report already describes this very problem. Even if you feel
that your issue is somewhat different, the resolution is likely
to be the same.
Thank you for your interest in PHP.
Previous Comments:
------------------------------------------------------------------------
[2009-10-26 13:45:13] christopheb156 at hotmail 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=49999&edit=1