#49999 [Opn->Bgs]: ArrayIterator does not clone itself when referencing itself

From: Date: Mon, 26 Oct 2009 22:40:30 +0000
Subject: #49999 [Opn->Bgs]: ArrayIterator does not clone itself when referencing itself
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-143983@lists.php.net to get a copy of this message
ID: 49999 Updated by: jani@php.net 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

« previous php.bugs (#143983) next »