1: --TEST--
2: Ensure foreach splits the iterated entity from its cow reference set, for all sorts of iterated entities.
3: --FILE--
4: <?php
5: error_reporting(E_ALL & ~E_STRICT);
6:
7: echo "\n" . '$a' . "\n";
8: $b = $a = array('original');
9: foreach($a as $k=>&$v) {
10: $v = 'changed';
11: }
12: var_dump($b);
13: unset($a, $b);
14:
15: echo "\n" . '${\'a\'}' . "\n";
16: $b = $a = array('original');
17: foreach(${'a'} as $k=>&$v) {
18: $v = 'changed';
19: }
20: var_dump($b);
21: unset($a, $b);
22:
23: echo "\n" . '$$a' . "\n";
24: $a = 'blah';
25: $$a = array('original');
26: $b = $$a;
27: foreach($$a as $k=>&$v) {
28: $v = 'changed';
29: }
30: var_dump($b);
31: unset($a, $b);
32:
33: echo "\n" . '$a[0]' . "\n";
34: $b = $a[0] = array('original');
35: foreach($a[0] as $k=>&$v) {
36: $v = 'changed';
37: }
38: var_dump($b);
39: unset($a, $b);
40:
41: echo "\n" . '$a[0][0]' . "\n";
42: $b = $a[0][0] = array('original');
43: foreach($a[0][0] as $k=>&$v) {
44: $v = 'changed';
45: }
46: var_dump($b);
47: unset($a, $b);
48:
49: echo "\n" . '$a->b' . "\n";
50: $b = $a->b = array('original');
51: foreach($a->b as $k=>&$v) {
52: $v = 'changed';
53: }
54: var_dump($b);
55: unset($a, $b);
56:
57: echo "\n" . '$a->b->c' . "\n";
58: $b = $a->b->c = array('original');
59: foreach($a->b as $k=>&$v) {
60: $v = 'changed';
61: }
62: var_dump($b);
63: unset($a, $b);
64:
65: echo "\n" . '$a->b[0]' . "\n";
66: $b = $a->b[0] = array('original');
67: foreach($a->b[0] as $k=>&$v) {
68: $v = 'changed';
69: }
70: var_dump($b);
71: unset($a, $b);
72:
73: echo "\n" . '$a->b[0][0]' . "\n";
74: $b = $a->b[0][0] = array('original');
75: foreach($a->b[0][0] as $k=>&$v) {
76: $v = 'changed';
77: }
78: var_dump($b);
79: unset($a, $b);
80:
81: echo "\n" . '$a->b[0]->c' . "\n";
82: $b = $a->b[0]->c = array('original');
83: foreach($a->b[0]->c as $k=>&$v) {
84: $v = 'changed';
85: }
86: var_dump($b);
87: unset($a, $b);
88:
89: class C {
90: public static $a;
91: }
92:
93: echo "\n" . 'C::$a' . "\n";
94: C::$a = array('original');
95: $b = C::$a;
96: foreach(C::$a as $k=>&$v) {
97: $v = 'changed';
98: }
99: var_dump($b);
100: unset($a, $b);
101:
102: echo "\n" . 'C::$a[0]' . "\n";
103: C::$a[0] = array('original');
104: $b = C::$a[0];
105: foreach(C::$a[0] as $k=>&$v) {
106: $v = 'changed';
107: }
108: var_dump($b);
109: unset(C::$a[0], $b);
110:
111: echo "\n" . 'C::$a[0]->b' . "\n";
112: C::$a[0]->b = array('original');
113: $b = C::$a[0]->b;
114: foreach(C::$a[0]->b as $k=>&$v) {
115: $v = 'changed';
116: }
117: var_dump($b);
118: unset(C::$a[0]->b, $b);
119: ?>
120: --EXPECTF--
121:
122: $a
123: array(1) {
124: [0]=>
125: string(8) "original"
126: }
127:
128: ${'a'}
129: array(1) {
130: [0]=>
131: string(8) "original"
132: }
133:
134: $$a
135: array(1) {
136: [0]=>
137: string(8) "original"
138: }
139:
140: $a[0]
141: array(1) {
142: [0]=>
143: string(8) "original"
144: }
145:
146: $a[0][0]
147: array(1) {
148: [0]=>
149: string(8) "original"
150: }
151:
152: $a->b
153: array(1) {
154: [0]=>
155: string(8) "original"
156: }
157:
158: $a->b->c
159: array(1) {
160: [0]=>
161: string(8) "original"
162: }
163:
164: $a->b[0]
165: array(1) {
166: [0]=>
167: string(8) "original"
168: }
169:
170: $a->b[0][0]
171: array(1) {
172: [0]=>
173: string(8) "original"
174: }
175:
176: $a->b[0]->c
177: array(1) {
178: [0]=>
179: string(8) "original"
180: }
181:
182: C::$a
183: array(1) {
184: [0]=>
185: string(8) "original"
186: }
187:
188: C::$a[0]
189: array(1) {
190: [0]=>
191: string(8) "original"
192: }
193:
194: C::$a[0]->b
195: array(1) {
196: [0]=>
197: string(8) "original"
198: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>