Annotation of embedaddon/php/tests/lang/foreachLoopObjects.002.phpt, revision 1.1.1.1

1.1       misho       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===

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>