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>