ID: 50000 Updated by: fel...@php.net 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