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