~ubuntu-branches/ubuntu/quantal/php5/quantal

« back to all changes in this revision

Viewing changes to tests/lang/foreachLoopObjects.002.phpt

  • Committer: Bazaar Package Importer
  • Author(s): Sean Finney
  • Date: 2009-07-01 09:12:10 UTC
  • mto: (0.9.1) (1.1.17 upstream)
  • mto: This revision was merged to the branch mainline in revision 58.
  • Revision ID: james.westby@ubuntu.com-20090701091210-go0h6506p62on17r
Tags: upstream-5.3.0
ImportĀ upstreamĀ versionĀ 5.3.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
--TEST--
 
2
Foreach loop tests - visibility.
 
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
        function doForEachC() {
 
14
                echo "in C::doForEachC\n";
 
15
                foreach ($this as $k=>&$v) {
 
16
                        var_dump($v);
 
17
                        $v="changed.$k";
 
18
                }
 
19
        }
 
20
                
 
21
        static function doForEach($obj) {
 
22
                echo "in C::doForEach\n";
 
23
                foreach ($obj as $k=>&$v) {
 
24
                        var_dump($v);
 
25
                        $v="changed.$k";
 
26
                }
 
27
        }
 
28
        
 
29
        function doForEachOnThis() {
 
30
                echo "in C::doForEachOnThis\n";
 
31
                foreach ($this as $k=>&$v) {
 
32
                        var_dump($v);
 
33
                        $v="changed.$k";
 
34
                }
 
35
        }
 
36
        
 
37
}
 
38
 
 
39
class D extends C {
 
40
        
 
41
        private $f = "Original f";
 
42
        protected $g = "Original g";
 
43
        
 
44
        static function doForEach($obj) {
 
45
                echo "in D::doForEach\n";
 
46
                foreach ($obj as $k=>&$v) {
 
47
                        var_dump($v);
 
48
                        $v="changed.$k";
 
49
                }
 
50
        }
 
51
 
 
52
        function doForEachOnThis() {
 
53
                echo "in D::doForEachOnThis\n";
 
54
                foreach ($this as $k=>&$v) {
 
55
                        var_dump($v);
 
56
                        $v="changed.$k";
 
57
                }
 
58
        }
 
59
}
 
60
 
 
61
class E extends D {
 
62
        public $a = "Overridden a";
 
63
        public $b = "Overridden b";
 
64
        public $c = "Overridden c";
 
65
        protected $d = "Overridden d";
 
66
        private $e = "Overridden e";    
 
67
 
 
68
        static function doForEach($obj) {
 
69
                echo "in E::doForEach\n";
 
70
                foreach ($obj as $k=>&$v) {
 
71
                        var_dump($v);
 
72
                        $v="changed.$k";
 
73
                }
 
74
        }
 
75
 
 
76
        function doForEachOnThis() {
 
77
                echo "in E::doForEachOnThis\n";
 
78
                foreach ($this as $k=>&$v) {
 
79
                        var_dump($v);
 
80
                        $v="changed.$k";
 
81
                }
 
82
        }
 
83
}
 
84
 
 
85
echo "\n\nIterate over various generations from within overridden methods:\n";
 
86
echo "\n--> Using instance of C:\n";
 
87
$myC = new C;
 
88
$myC->doForEachOnThis();
 
89
var_dump($myC);
 
90
echo "\n--> Using instance of D:\n";
 
91
$myD = new D;
 
92
$myD->doForEachOnThis();
 
93
var_dump($myD);
 
94
echo "\n--> Using instance of E:\n";
 
95
$myE = new E;
 
96
$myE->doForEachOnThis();
 
97
var_dump($myE);
 
98
 
 
99
echo "\n\nIterate over various generations from within an inherited method:\n";
 
100
echo "\n--> Using instance of C:\n";
 
101
$myC = new C;
 
102
$myC->doForEachC();
 
103
var_dump($myC);
 
104
echo "\n--> Using instance of D:\n";
 
105
$myD = new D;
 
106
$myD->doForEachC();
 
107
var_dump($myD);
 
108
echo "\n--> Using instance of E:\n";
 
109
$myE = new E;
 
110
$myE->doForEachC();
 
111
var_dump($myE);
 
112
 
 
113
echo "\n\nIterate over various generations from within an overridden static method:\n";
 
114
echo "\n--> Using instance of C:\n";
 
115
$myC = new C;
 
116
C::doForEach($myC);
 
117
var_dump($myC);
 
118
$myC = new C;
 
119
D::doForEach($myC);
 
120
var_dump($myC);
 
121
$myC = new C;
 
122
E::doForEach($myC);
 
123
var_dump($myC);
 
124
echo "\n--> Using instance of D:\n";
 
125
$myD = new D;
 
126
C::doForEach($myD);
 
127
var_dump($myD);
 
128
$myD = new D;
 
129
D::doForEach($myD);
 
130
var_dump($myD);
 
131
$myD = new D;
 
132
E::doForEach($myD);
 
133
var_dump($myD);
 
134
echo "\n--> Using instance of E:\n";
 
135
$myE = new E;
 
136
C::doForEach($myE);
 
137
var_dump($myE);
 
138
$myE = new E;
 
139
D::doForEach($myE);
 
140
var_dump($myE);
 
141
$myE = new E;
 
142
E::doForEach($myE);
 
143
var_dump($myE);
 
144
 
 
145
 
 
146
echo "\n\nIterate over various generations from outside the object:\n";
 
147
echo "\n--> Using instance of C:\n";
 
148
$myC = new C;
 
149
foreach ($myC as $k=>&$v) {
 
150
        var_dump($v);
 
151
        $v="changed.$k";
 
152
}
 
153
var_dump($myC);
 
154
echo "\n--> Using instance of D:\n";
 
155
$myD = new D;
 
156
foreach ($myD as $k=>&$v) {
 
157
        var_dump($v);
 
158
        $v="changed.$k";
 
159
}
 
160
var_dump($myD);
 
161
echo "\n--> Using instance of E:\n";
 
162
$myE = new E;
 
163
foreach ($myE as $k=>&$v) {
 
164
        var_dump($v);
 
165
        $v="changed.$k";
 
166
}
 
167
var_dump($myE);
 
168
?>
 
169
===DONE===
 
170
--EXPECTF--
 
171
Iterate over various generations from within overridden methods:
 
172
 
 
173
--> Using instance of C:
 
174
in C::doForEachOnThis
 
175
string(10) "Original a"
 
176
string(10) "Original b"
 
177
string(10) "Original c"
 
178
string(10) "Original d"
 
179
string(10) "Original e"
 
180
object(C)#%d (5) {
 
181
  ["a"]=>
 
182
  string(9) "changed.a"
 
183
  ["b"]=>
 
184
  string(9) "changed.b"
 
185
  ["c"]=>
 
186
  string(9) "changed.c"
 
187
  ["d":protected]=>
 
188
  string(9) "changed.d"
 
189
  ["e":"C":private]=>
 
190
  string(9) "changed.e"
 
191
}
 
192
 
 
193
--> Using instance of D:
 
194
in D::doForEachOnThis
 
195
string(10) "Original f"
 
196
string(10) "Original g"
 
197
string(10) "Original a"
 
198
string(10) "Original b"
 
199
string(10) "Original c"
 
200
string(10) "Original d"
 
201
object(D)#%d (7) {
 
202
  ["f":"D":private]=>
 
203
  string(9) "changed.f"
 
204
  ["g":protected]=>
 
205
  string(9) "changed.g"
 
206
  ["a"]=>
 
207
  string(9) "changed.a"
 
208
  ["b"]=>
 
209
  string(9) "changed.b"
 
210
  ["c"]=>
 
211
  string(9) "changed.c"
 
212
  ["d":protected]=>
 
213
  string(9) "changed.d"
 
214
  ["e":"C":private]=>
 
215
  string(10) "Original e"
 
216
}
 
217
 
 
218
--> Using instance of E:
 
219
in E::doForEachOnThis
 
220
string(12) "Overridden a"
 
221
string(12) "Overridden b"
 
222
string(12) "Overridden c"
 
223
string(12) "Overridden d"
 
224
string(12) "Overridden e"
 
225
string(10) "Original g"
 
226
object(E)#%d (8) {
 
227
  ["a"]=>
 
228
  string(9) "changed.a"
 
229
  ["b"]=>
 
230
  string(9) "changed.b"
 
231
  ["c"]=>
 
232
  string(9) "changed.c"
 
233
  ["d":protected]=>
 
234
  string(9) "changed.d"
 
235
  ["e":"E":private]=>
 
236
  string(9) "changed.e"
 
237
  ["f":"D":private]=>
 
238
  string(10) "Original f"
 
239
  ["g":protected]=>
 
240
  string(9) "changed.g"
 
241
  ["e":"C":private]=>
 
242
  string(10) "Original e"
 
243
}
 
244
 
 
245
 
 
246
Iterate over various generations from within an inherited method:
 
247
 
 
248
--> Using instance of C:
 
249
in C::doForEachC
 
250
string(10) "Original a"
 
251
string(10) "Original b"
 
252
string(10) "Original c"
 
253
string(10) "Original d"
 
254
string(10) "Original e"
 
255
object(C)#%d (5) {
 
256
  ["a"]=>
 
257
  string(9) "changed.a"
 
258
  ["b"]=>
 
259
  string(9) "changed.b"
 
260
  ["c"]=>
 
261
  string(9) "changed.c"
 
262
  ["d":protected]=>
 
263
  string(9) "changed.d"
 
264
  ["e":"C":private]=>
 
265
  string(9) "changed.e"
 
266
}
 
267
 
 
268
--> Using instance of D:
 
269
in C::doForEachC
 
270
string(10) "Original g"
 
271
string(10) "Original a"
 
272
string(10) "Original b"
 
273
string(10) "Original c"
 
274
string(10) "Original d"
 
275
string(10) "Original e"
 
276
object(D)#%d (7) {
 
277
  ["f":"D":private]=>
 
278
  string(10) "Original f"
 
279
  ["g":protected]=>
 
280
  string(9) "changed.g"
 
281
  ["a"]=>
 
282
  string(9) "changed.a"
 
283
  ["b"]=>
 
284
  string(9) "changed.b"
 
285
  ["c"]=>
 
286
  string(9) "changed.c"
 
287
  ["d":protected]=>
 
288
  string(9) "changed.d"
 
289
  ["e":"C":private]=>
 
290
  string(9) "changed.e"
 
291
}
 
292
 
 
293
--> Using instance of E:
 
294
in C::doForEachC
 
295
string(12) "Overridden a"
 
296
string(12) "Overridden b"
 
297
string(12) "Overridden c"
 
298
string(12) "Overridden d"
 
299
string(10) "Original g"
 
300
string(10) "Original e"
 
301
object(E)#%d (8) {
 
302
  ["a"]=>
 
303
  string(9) "changed.a"
 
304
  ["b"]=>
 
305
  string(9) "changed.b"
 
306
  ["c"]=>
 
307
  string(9) "changed.c"
 
308
  ["d":protected]=>
 
309
  string(9) "changed.d"
 
310
  ["e":"E":private]=>
 
311
  string(12) "Overridden e"
 
312
  ["f":"D":private]=>
 
313
  string(10) "Original f"
 
314
  ["g":protected]=>
 
315
  string(9) "changed.g"
 
316
  ["e":"C":private]=>
 
317
  string(9) "changed.e"
 
318
}
 
319
 
 
320
 
 
321
Iterate over various generations from within an overridden static method:
 
322
 
 
323
--> Using instance of C:
 
324
in C::doForEach
 
325
string(10) "Original a"
 
326
string(10) "Original b"
 
327
string(10) "Original c"
 
328
string(10) "Original d"
 
329
string(10) "Original e"
 
330
object(C)#%d (5) {
 
331
  ["a"]=>
 
332
  string(9) "changed.a"
 
333
  ["b"]=>
 
334
  string(9) "changed.b"
 
335
  ["c"]=>
 
336
  string(9) "changed.c"
 
337
  ["d":protected]=>
 
338
  string(9) "changed.d"
 
339
  ["e":"C":private]=>
 
340
  string(9) "changed.e"
 
341
}
 
342
in D::doForEach
 
343
string(10) "Original a"
 
344
string(10) "Original b"
 
345
string(10) "Original c"
 
346
string(10) "Original d"
 
347
object(C)#%d (5) {
 
348
  ["a"]=>
 
349
  string(9) "changed.a"
 
350
  ["b"]=>
 
351
  string(9) "changed.b"
 
352
  ["c"]=>
 
353
  string(9) "changed.c"
 
354
  ["d":protected]=>
 
355
  string(9) "changed.d"
 
356
  ["e":"C":private]=>
 
357
  string(10) "Original e"
 
358
}
 
359
in E::doForEach
 
360
string(10) "Original a"
 
361
string(10) "Original b"
 
362
string(10) "Original c"
 
363
string(10) "Original d"
 
364
object(C)#%d (5) {
 
365
  ["a"]=>
 
366
  string(9) "changed.a"
 
367
  ["b"]=>
 
368
  string(9) "changed.b"
 
369
  ["c"]=>
 
370
  string(9) "changed.c"
 
371
  ["d":protected]=>
 
372
  string(9) "changed.d"
 
373
  ["e":"C":private]=>
 
374
  string(10) "Original e"
 
375
}
 
376
 
 
377
--> Using instance of D:
 
378
in C::doForEach
 
379
string(10) "Original g"
 
380
string(10) "Original a"
 
381
string(10) "Original b"
 
382
string(10) "Original c"
 
383
string(10) "Original d"
 
384
string(10) "Original e"
 
385
object(D)#%d (7) {
 
386
  ["f":"D":private]=>
 
387
  string(10) "Original f"
 
388
  ["g":protected]=>
 
389
  string(9) "changed.g"
 
390
  ["a"]=>
 
391
  string(9) "changed.a"
 
392
  ["b"]=>
 
393
  string(9) "changed.b"
 
394
  ["c"]=>
 
395
  string(9) "changed.c"
 
396
  ["d":protected]=>
 
397
  string(9) "changed.d"
 
398
  ["e":"C":private]=>
 
399
  string(9) "changed.e"
 
400
}
 
401
in D::doForEach
 
402
string(10) "Original f"
 
403
string(10) "Original g"
 
404
string(10) "Original a"
 
405
string(10) "Original b"
 
406
string(10) "Original c"
 
407
string(10) "Original d"
 
408
object(D)#%d (7) {
 
409
  ["f":"D":private]=>
 
410
  string(9) "changed.f"
 
411
  ["g":protected]=>
 
412
  string(9) "changed.g"
 
413
  ["a"]=>
 
414
  string(9) "changed.a"
 
415
  ["b"]=>
 
416
  string(9) "changed.b"
 
417
  ["c"]=>
 
418
  string(9) "changed.c"
 
419
  ["d":protected]=>
 
420
  string(9) "changed.d"
 
421
  ["e":"C":private]=>
 
422
  string(10) "Original e"
 
423
}
 
424
in E::doForEach
 
425
string(10) "Original g"
 
426
string(10) "Original a"
 
427
string(10) "Original b"
 
428
string(10) "Original c"
 
429
string(10) "Original d"
 
430
object(D)#%d (7) {
 
431
  ["f":"D":private]=>
 
432
  string(10) "Original f"
 
433
  ["g":protected]=>
 
434
  string(9) "changed.g"
 
435
  ["a"]=>
 
436
  string(9) "changed.a"
 
437
  ["b"]=>
 
438
  string(9) "changed.b"
 
439
  ["c"]=>
 
440
  string(9) "changed.c"
 
441
  ["d":protected]=>
 
442
  string(9) "changed.d"
 
443
  ["e":"C":private]=>
 
444
  string(10) "Original e"
 
445
}
 
446
 
 
447
--> Using instance of E:
 
448
in C::doForEach
 
449
string(12) "Overridden a"
 
450
string(12) "Overridden b"
 
451
string(12) "Overridden c"
 
452
string(12) "Overridden d"
 
453
string(10) "Original g"
 
454
string(10) "Original e"
 
455
object(E)#%d (8) {
 
456
  ["a"]=>
 
457
  string(9) "changed.a"
 
458
  ["b"]=>
 
459
  string(9) "changed.b"
 
460
  ["c"]=>
 
461
  string(9) "changed.c"
 
462
  ["d":protected]=>
 
463
  string(9) "changed.d"
 
464
  ["e":"E":private]=>
 
465
  string(12) "Overridden e"
 
466
  ["f":"D":private]=>
 
467
  string(10) "Original f"
 
468
  ["g":protected]=>
 
469
  string(9) "changed.g"
 
470
  ["e":"C":private]=>
 
471
  string(9) "changed.e"
 
472
}
 
473
in D::doForEach
 
474
string(12) "Overridden a"
 
475
string(12) "Overridden b"
 
476
string(12) "Overridden c"
 
477
string(12) "Overridden d"
 
478
string(10) "Original f"
 
479
string(10) "Original g"
 
480
object(E)#%d (8) {
 
481
  ["a"]=>
 
482
  string(9) "changed.a"
 
483
  ["b"]=>
 
484
  string(9) "changed.b"
 
485
  ["c"]=>
 
486
  string(9) "changed.c"
 
487
  ["d":protected]=>
 
488
  string(9) "changed.d"
 
489
  ["e":"E":private]=>
 
490
  string(12) "Overridden e"
 
491
  ["f":"D":private]=>
 
492
  string(9) "changed.f"
 
493
  ["g":protected]=>
 
494
  string(9) "changed.g"
 
495
  ["e":"C":private]=>
 
496
  string(10) "Original e"
 
497
}
 
498
in E::doForEach
 
499
string(12) "Overridden a"
 
500
string(12) "Overridden b"
 
501
string(12) "Overridden c"
 
502
string(12) "Overridden d"
 
503
string(12) "Overridden e"
 
504
string(10) "Original g"
 
505
object(E)#%d (8) {
 
506
  ["a"]=>
 
507
  string(9) "changed.a"
 
508
  ["b"]=>
 
509
  string(9) "changed.b"
 
510
  ["c"]=>
 
511
  string(9) "changed.c"
 
512
  ["d":protected]=>
 
513
  string(9) "changed.d"
 
514
  ["e":"E":private]=>
 
515
  string(9) "changed.e"
 
516
  ["f":"D":private]=>
 
517
  string(10) "Original f"
 
518
  ["g":protected]=>
 
519
  string(9) "changed.g"
 
520
  ["e":"C":private]=>
 
521
  string(10) "Original e"
 
522
}
 
523
 
 
524
 
 
525
Iterate over various generations from outside the object:
 
526
 
 
527
--> Using instance of C:
 
528
string(10) "Original a"
 
529
string(10) "Original b"
 
530
string(10) "Original c"
 
531
object(C)#%d (5) {
 
532
  ["a"]=>
 
533
  string(9) "changed.a"
 
534
  ["b"]=>
 
535
  string(9) "changed.b"
 
536
  ["c"]=>
 
537
  &string(9) "changed.c"
 
538
  ["d":protected]=>
 
539
  string(10) "Original d"
 
540
  ["e":"C":private]=>
 
541
  string(10) "Original e"
 
542
}
 
543
 
 
544
--> Using instance of D:
 
545
string(10) "Original a"
 
546
string(10) "Original b"
 
547
string(10) "Original c"
 
548
object(D)#%d (7) {
 
549
  ["f":"D":private]=>
 
550
  string(10) "Original f"
 
551
  ["g":protected]=>
 
552
  string(10) "Original g"
 
553
  ["a"]=>
 
554
  string(9) "changed.a"
 
555
  ["b"]=>
 
556
  string(9) "changed.b"
 
557
  ["c"]=>
 
558
  &string(9) "changed.c"
 
559
  ["d":protected]=>
 
560
  string(10) "Original d"
 
561
  ["e":"C":private]=>
 
562
  string(10) "Original e"
 
563
}
 
564
 
 
565
--> Using instance of E:
 
566
string(12) "Overridden a"
 
567
string(12) "Overridden b"
 
568
string(12) "Overridden c"
 
569
object(E)#%d (8) {
 
570
  ["a"]=>
 
571
  string(9) "changed.a"
 
572
  ["b"]=>
 
573
  string(9) "changed.b"
 
574
  ["c"]=>
 
575
  &string(9) "changed.c"
 
576
  ["d":protected]=>
 
577
  string(12) "Overridden d"
 
578
  ["e":"E":private]=>
 
579
  string(12) "Overridden e"
 
580
  ["f":"D":private]=>
 
581
  string(10) "Original f"
 
582
  ["g":protected]=>
 
583
  string(10) "Original g"
 
584
  ["e":"C":private]=>
 
585
  string(10) "Original e"
 
586
}
 
587
===DONE===
 
 
b'\\ No newline at end of file'