Return to foreachLoopObjects.003.phpt CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / tests / lang |
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===