Annotation of embedaddon/php/tests/lang/foreachLoopObjects.003.phpt, revision 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>