1--TEST--
2serialization: arrays with references to the containing array
3--FILE--
4<?php
5/* Prototype  : proto string serialize(mixed variable)
6 * Description: Returns a string representation of variable (which can later be unserialized)
7 * Source code: ext/standard/var.c
8 * Alias to functions:
9 */
10/* Prototype  : proto mixed unserialize(string variable_representation)
11 * Description: Takes a string representation of variable and recreates it
12 * Source code: ext/standard/var.c
13 * Alias to functions:
14 */
15
16function check(&$a) {
17	var_dump($a);
18	$ser = serialize($a);
19	var_dump($ser);
20
21	$b = unserialize($ser);
22	var_dump($b);
23	$b[0] = "b0.changed";
24	var_dump($b);
25	$b[1] = "b1.changed";
26	var_dump($b);
27	$b[2] = "b2.changed";
28	var_dump($b);
29}
30
31echo "\n\n--- 1 refs container:\n";
32$a = array();
33$a[0] = &$a;
34$a[1] = 1;
35$a[2] = 1;
36check($a);
37
38echo "\n\n--- 1,2 ref container:\n";
39$a = array();
40$a[0] = &$a;
41$a[1] = &$a;
42$a[2] = 1;
43check($a);
44
45echo "\n\n--- 1,2,3 ref container:\n";
46$a = array();
47$a[0] = &$a;
48$a[1] = &$a;
49$a[2] = &$a;
50check($a);
51
52echo "Done";
53?>
54--EXPECTF--
55--- 1 refs container:
56array(3) {
57  [0]=>
58  &array(3) {
59    [0]=>
60    *RECURSION*
61    [1]=>
62    int(1)
63    [2]=>
64    int(1)
65  }
66  [1]=>
67  int(1)
68  [2]=>
69  int(1)
70}
71string(56) "a:3:{i:0;a:3:{i:0;R:2;i:1;i:1;i:2;i:1;}i:1;i:1;i:2;i:1;}"
72array(3) {
73  [0]=>
74  &array(3) {
75    [0]=>
76    *RECURSION*
77    [1]=>
78    int(1)
79    [2]=>
80    int(1)
81  }
82  [1]=>
83  int(1)
84  [2]=>
85  int(1)
86}
87array(3) {
88  [0]=>
89  string(10) "b0.changed"
90  [1]=>
91  int(1)
92  [2]=>
93  int(1)
94}
95array(3) {
96  [0]=>
97  string(10) "b0.changed"
98  [1]=>
99  string(10) "b1.changed"
100  [2]=>
101  int(1)
102}
103array(3) {
104  [0]=>
105  string(10) "b0.changed"
106  [1]=>
107  string(10) "b1.changed"
108  [2]=>
109  string(10) "b2.changed"
110}
111
112
113--- 1,2 ref container:
114array(3) {
115  [0]=>
116  &array(3) {
117    [0]=>
118    *RECURSION*
119    [1]=>
120    *RECURSION*
121    [2]=>
122    int(1)
123  }
124  [1]=>
125  &array(3) {
126    [0]=>
127    *RECURSION*
128    [1]=>
129    *RECURSION*
130    [2]=>
131    int(1)
132  }
133  [2]=>
134  int(1)
135}
136string(56) "a:3:{i:0;a:3:{i:0;R:2;i:1;R:2;i:2;i:1;}i:1;R:2;i:2;i:1;}"
137array(3) {
138  [0]=>
139  &array(3) {
140    [0]=>
141    *RECURSION*
142    [1]=>
143    *RECURSION*
144    [2]=>
145    int(1)
146  }
147  [1]=>
148  &array(3) {
149    [0]=>
150    *RECURSION*
151    [1]=>
152    *RECURSION*
153    [2]=>
154    int(1)
155  }
156  [2]=>
157  int(1)
158}
159array(3) {
160  [0]=>
161  &string(10) "b0.changed"
162  [1]=>
163  &string(10) "b0.changed"
164  [2]=>
165  int(1)
166}
167array(3) {
168  [0]=>
169  &string(10) "b1.changed"
170  [1]=>
171  &string(10) "b1.changed"
172  [2]=>
173  int(1)
174}
175array(3) {
176  [0]=>
177  &string(10) "b1.changed"
178  [1]=>
179  &string(10) "b1.changed"
180  [2]=>
181  string(10) "b2.changed"
182}
183
184
185--- 1,2,3 ref container:
186array(3) {
187  [0]=>
188  &array(3) {
189    [0]=>
190    *RECURSION*
191    [1]=>
192    *RECURSION*
193    [2]=>
194    *RECURSION*
195  }
196  [1]=>
197  &array(3) {
198    [0]=>
199    *RECURSION*
200    [1]=>
201    *RECURSION*
202    [2]=>
203    *RECURSION*
204  }
205  [2]=>
206  &array(3) {
207    [0]=>
208    *RECURSION*
209    [1]=>
210    *RECURSION*
211    [2]=>
212    *RECURSION*
213  }
214}
215string(56) "a:3:{i:0;a:3:{i:0;R:2;i:1;R:2;i:2;R:2;}i:1;R:2;i:2;R:2;}"
216array(3) {
217  [0]=>
218  &array(3) {
219    [0]=>
220    *RECURSION*
221    [1]=>
222    *RECURSION*
223    [2]=>
224    *RECURSION*
225  }
226  [1]=>
227  &array(3) {
228    [0]=>
229    *RECURSION*
230    [1]=>
231    *RECURSION*
232    [2]=>
233    *RECURSION*
234  }
235  [2]=>
236  &array(3) {
237    [0]=>
238    *RECURSION*
239    [1]=>
240    *RECURSION*
241    [2]=>
242    *RECURSION*
243  }
244}
245array(3) {
246  [0]=>
247  &string(10) "b0.changed"
248  [1]=>
249  &string(10) "b0.changed"
250  [2]=>
251  &string(10) "b0.changed"
252}
253array(3) {
254  [0]=>
255  &string(10) "b1.changed"
256  [1]=>
257  &string(10) "b1.changed"
258  [2]=>
259  &string(10) "b1.changed"
260}
261array(3) {
262  [0]=>
263  &string(10) "b2.changed"
264  [1]=>
265  &string(10) "b2.changed"
266  [2]=>
267  &string(10) "b2.changed"
268}
269Done
270