Annotation of embedaddon/php/tests/lang/foreachLoopObjects.003.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Foreach loop tests - modifying the object during the loop.
3: --FILE--
4: <?php
5:
6: class C {
7: public $a = "Original a";
8: public $b = "Original b";
9: public $c = "Original c";
10: protected $d = "Original d";
11: private $e = "Original e";
12: }
13:
14: echo "\nDirectly changing object values.\n";
15: $obj = new C;
16: foreach ($obj as $k=>$v) {
17: $obj->$k="changed.$k";
18: var_dump($v);
19: }
20: var_dump($obj);
21:
22: echo "\nModifying the foreach \$value.\n";
23: $obj = new C;
24: foreach ($obj as $k=>$v) {
25: $v="changed.$k";
26: }
27: var_dump($obj);
28:
29:
30: echo "\nModifying the foreach &\$value.\n";
31: $obj = new C;
32: foreach ($obj as $k=>&$v) {
33: $v="changed.$k";
34: }
35: var_dump($obj);
36:
37: echo "\nAdding properties to an an object.\n";
38: $obj = new C;
39: $counter=0;
40: foreach ($obj as $v) {
41: $newPropName = "new$counter";
42: $obj->$newPropName = "Added property $counter";
43: if ($counter++>10) {
44: echo "Loop detected\n";
45: break;
46: }
47: var_dump($v);
48: }
49: var_dump($obj);
50:
51: echo "\nAdding properties to an an object, using &\$value.\n";
52: $obj = new C;
53: $counter=0;
54: foreach ($obj as &$v) {
55: $newPropName = "new$counter";
56: $obj->$newPropName = "Added property $counter";
57: if ($counter++>10) {
58: echo "Loop detected\n";
59: break;
60: }
61: var_dump($v);
62: }
63: var_dump($obj);
64:
65: echo "\nRemoving properties from an object.\n";
66: $obj = new C;
67: foreach ($obj as $v) {
68: unset($obj->a);
69: unset($obj->b);
70: unset($obj->c);
71: var_dump($v);
72: }
73: var_dump($obj);
74:
75: echo "\nRemoving properties from an object, using &\$value.\n";
76: $obj = new C;
77: foreach ($obj as &$v) {
78: unset($obj->a);
79: unset($obj->b);
80: unset($obj->c);
81: var_dump($v);
82: }
83: var_dump($obj);
84:
85: ?>
86: ===DONE===
87: --EXPECTF--
88: Directly changing object values.
89: string(10) "Original a"
90: string(10) "Original b"
91: string(10) "Original c"
92: object(C)#%d (5) {
93: ["a"]=>
94: string(9) "changed.a"
95: ["b"]=>
96: string(9) "changed.b"
97: ["c"]=>
98: string(9) "changed.c"
99: ["d":protected]=>
100: string(10) "Original d"
101: ["e":"C":private]=>
102: string(10) "Original e"
103: }
104:
105: Modifying the foreach $value.
106: object(C)#%d (5) {
107: ["a"]=>
108: string(10) "Original a"
109: ["b"]=>
110: string(10) "Original b"
111: ["c"]=>
112: string(10) "Original c"
113: ["d":protected]=>
114: string(10) "Original d"
115: ["e":"C":private]=>
116: string(10) "Original e"
117: }
118:
119: Modifying the foreach &$value.
120: object(C)#%d (5) {
121: ["a"]=>
122: string(9) "changed.a"
123: ["b"]=>
124: string(9) "changed.b"
125: ["c"]=>
126: &string(9) "changed.c"
127: ["d":protected]=>
128: string(10) "Original d"
129: ["e":"C":private]=>
130: string(10) "Original e"
131: }
132:
133: Adding properties to an an object.
134: string(10) "Original a"
135: string(10) "Original b"
136: string(10) "Original c"
137: string(16) "Added property 0"
138: string(16) "Added property 1"
139: string(16) "Added property 2"
140: string(16) "Added property 3"
141: string(16) "Added property 4"
142: string(16) "Added property 5"
143: string(16) "Added property 6"
144: string(16) "Added property 7"
145: Loop detected
146: object(C)#%d (17) {
147: ["a"]=>
148: string(10) "Original a"
149: ["b"]=>
150: string(10) "Original b"
151: ["c"]=>
152: string(10) "Original c"
153: ["d":protected]=>
154: string(10) "Original d"
155: ["e":"C":private]=>
156: string(10) "Original e"
157: ["new0"]=>
158: string(16) "Added property 0"
159: ["new1"]=>
160: string(16) "Added property 1"
161: ["new2"]=>
162: string(16) "Added property 2"
163: ["new3"]=>
164: string(16) "Added property 3"
165: ["new4"]=>
166: string(16) "Added property 4"
167: ["new5"]=>
168: string(16) "Added property 5"
169: ["new6"]=>
170: string(16) "Added property 6"
171: ["new7"]=>
172: string(16) "Added property 7"
173: ["new8"]=>
174: string(16) "Added property 8"
175: ["new9"]=>
176: string(16) "Added property 9"
177: ["new10"]=>
178: string(17) "Added property 10"
179: ["new11"]=>
180: string(17) "Added property 11"
181: }
182:
183: Adding properties to an an object, using &$value.
184: string(10) "Original a"
185: string(10) "Original b"
186: string(10) "Original c"
187: string(16) "Added property 0"
188: string(16) "Added property 1"
189: string(16) "Added property 2"
190: string(16) "Added property 3"
191: string(16) "Added property 4"
192: string(16) "Added property 5"
193: string(16) "Added property 6"
194: string(16) "Added property 7"
195: Loop detected
196: object(C)#%d (17) {
197: ["a"]=>
198: string(10) "Original a"
199: ["b"]=>
200: string(10) "Original b"
201: ["c"]=>
202: string(10) "Original c"
203: ["d":protected]=>
204: string(10) "Original d"
205: ["e":"C":private]=>
206: string(10) "Original e"
207: ["new0"]=>
208: string(16) "Added property 0"
209: ["new1"]=>
210: string(16) "Added property 1"
211: ["new2"]=>
212: string(16) "Added property 2"
213: ["new3"]=>
214: string(16) "Added property 3"
215: ["new4"]=>
216: string(16) "Added property 4"
217: ["new5"]=>
218: string(16) "Added property 5"
219: ["new6"]=>
220: string(16) "Added property 6"
221: ["new7"]=>
222: string(16) "Added property 7"
223: ["new8"]=>
224: &string(16) "Added property 8"
225: ["new9"]=>
226: string(16) "Added property 9"
227: ["new10"]=>
228: string(17) "Added property 10"
229: ["new11"]=>
230: string(17) "Added property 11"
231: }
232:
233: Removing properties from an object.
234: string(10) "Original a"
235: object(C)#%d (2) {
236: ["d":protected]=>
237: string(10) "Original d"
238: ["e":"C":private]=>
239: string(10) "Original e"
240: }
241:
242: Removing properties from an object, using &$value.
243: string(10) "Original a"
244: object(C)#%d (2) {
245: ["d":protected]=>
246: string(10) "Original d"
247: ["e":"C":private]=>
248: string(10) "Original e"
249: }
250: ===DONE===
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>