1--TEST--
2Foreach loop tests - substituting the entire iterated entity during the loop.
3--FILE--
4<?php
5
6class C {
7	public $a = "Original a";
8	public $b = "Original b";
9	public $c = "Original c";
10	public $d = "Original d";
11	public $e = "Original e";
12}
13
14echo "\nSubstituting the iterated object for a different object.\n";
15$obj = new C;
16$obj2 = new stdclass;
17$obj2->a = "new a";
18$obj2->b = "new b";
19$obj2->c = "new c";
20$obj2->d = "new d";
21$obj2->e = "new e";
22$obj2->f = "new f";
23$ref = &$obj;
24$count=0;
25foreach ($obj as $v) {
26	var_dump($v);
27	if ($v==$obj->b) {
28	  $ref=$obj2;
29	}
30	if (++$count>10) {
31		echo "Loop detected.\n";
32		break;
33	}
34}
35var_dump($obj);
36
37echo "\nSubstituting the iterated object for an array.\n";
38$obj = new C;
39$a = array(1,2,3,4,5,6,7,8);
40$ref = &$obj;
41$count=0;
42foreach ($obj as $v) {
43	var_dump($v);
44	if ($v==="Original b") {
45	  $ref=$a;
46	}
47	if (++$count>10) {
48		echo "Loop detected.\n";
49		break;
50	}
51}
52var_dump($obj);
53
54echo "\nSubstituting the iterated array for an object.\n";
55$a = array(1,2,3,4,5,6,7,8);
56$obj = new C;
57$ref = &$a;
58$count=0;
59foreach ($a as $v) {
60	var_dump($v);
61	if ($v===2) {
62	  $ref=$obj;
63	}
64	if (++$count>10) {
65		echo "Loop detected.\n";
66		break;
67	}
68}
69var_dump($obj);
70
71?>
72--EXPECTF--
73Substituting the iterated object for a different object.
74string(10) "Original a"
75string(10) "Original b"
76string(10) "Original c"
77string(10) "Original d"
78string(10) "Original e"
79object(stdClass)#%d (6) {
80  ["a"]=>
81  string(5) "new a"
82  ["b"]=>
83  string(5) "new b"
84  ["c"]=>
85  string(5) "new c"
86  ["d"]=>
87  string(5) "new d"
88  ["e"]=>
89  string(5) "new e"
90  ["f"]=>
91  string(5) "new f"
92}
93
94Substituting the iterated object for an array.
95string(10) "Original a"
96string(10) "Original b"
97string(10) "Original c"
98string(10) "Original d"
99string(10) "Original e"
100array(8) {
101  [0]=>
102  int(1)
103  [1]=>
104  int(2)
105  [2]=>
106  int(3)
107  [3]=>
108  int(4)
109  [4]=>
110  int(5)
111  [5]=>
112  int(6)
113  [6]=>
114  int(7)
115  [7]=>
116  int(8)
117}
118
119Substituting the iterated array for an object.
120int(1)
121int(2)
122int(3)
123int(4)
124int(5)
125int(6)
126int(7)
127int(8)
128object(C)#%d (5) {
129  ["a"]=>
130  string(10) "Original a"
131  ["b"]=>
132  string(10) "Original b"
133  ["c"]=>
134  string(10) "Original c"
135  ["d"]=>
136  string(10) "Original d"
137  ["e"]=>
138  string(10) "Original e"
139}
140