1--TEST--
2SPL: Cloning nested ArrayObjects.
3--FILE--
4<?php
5class C {
6    public $p = 'C::p.orig';
7}
8
9$wrappedObject = new C;
10$innerArrayObject = new ArrayObject($wrappedObject);
11
12$outerArrayObject =  new ArrayObject($innerArrayObject);
13
14$wrappedObject->dynamic1 = 'new prop added to $wrappedObject before clone';
15$clonedOuterArrayObject = clone $outerArrayObject;
16$wrappedObject->dynamic2 = 'new prop added to $wrappedObject after clone';
17
18$innerArrayObject['new.iAO'] = 'new element added $innerArrayObject';
19$outerArrayObject['new.oAO'] = 'new element added to $outerArrayObject';
20$clonedOuterArrayObject['new.coAO'] = 'new element added to $clonedOuterArrayObject';
21
22var_dump($wrappedObject, $innerArrayObject, $outerArrayObject, $clonedOuterArrayObject);
23?>
24--EXPECT--
25object(C)#1 (5) {
26  ["p"]=>
27  string(9) "C::p.orig"
28  ["dynamic1"]=>
29  string(45) "new prop added to $wrappedObject before clone"
30  ["dynamic2"]=>
31  string(44) "new prop added to $wrappedObject after clone"
32  ["new.iAO"]=>
33  string(35) "new element added $innerArrayObject"
34  ["new.oAO"]=>
35  string(38) "new element added to $outerArrayObject"
36}
37object(ArrayObject)#2 (1) {
38  ["storage":"ArrayObject":private]=>
39  object(C)#1 (5) {
40    ["p"]=>
41    string(9) "C::p.orig"
42    ["dynamic1"]=>
43    string(45) "new prop added to $wrappedObject before clone"
44    ["dynamic2"]=>
45    string(44) "new prop added to $wrappedObject after clone"
46    ["new.iAO"]=>
47    string(35) "new element added $innerArrayObject"
48    ["new.oAO"]=>
49    string(38) "new element added to $outerArrayObject"
50  }
51}
52object(ArrayObject)#3 (1) {
53  ["storage":"ArrayObject":private]=>
54  object(ArrayObject)#2 (1) {
55    ["storage":"ArrayObject":private]=>
56    object(C)#1 (5) {
57      ["p"]=>
58      string(9) "C::p.orig"
59      ["dynamic1"]=>
60      string(45) "new prop added to $wrappedObject before clone"
61      ["dynamic2"]=>
62      string(44) "new prop added to $wrappedObject after clone"
63      ["new.iAO"]=>
64      string(35) "new element added $innerArrayObject"
65      ["new.oAO"]=>
66      string(38) "new element added to $outerArrayObject"
67    }
68  }
69}
70object(ArrayObject)#4 (1) {
71  ["storage":"ArrayObject":private]=>
72  array(3) {
73    ["p"]=>
74    string(9) "C::p.orig"
75    ["dynamic1"]=>
76    string(45) "new prop added to $wrappedObject before clone"
77    ["new.coAO"]=>
78    string(44) "new element added to $clonedOuterArrayObject"
79  }
80}
81