Annotation of embedaddon/php/tests/lang/foreachLoop.016.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: Ensure foreach splits the iterated entity from its cow reference set, for all sorts of iterated entities.
! 3: --FILE--
! 4: <?php
! 5: error_reporting(E_ALL & ~E_STRICT);
! 6:
! 7: echo "\n" . '$a' . "\n";
! 8: $b = $a = array('original');
! 9: foreach($a as $k=>&$v) {
! 10: $v = 'changed';
! 11: }
! 12: var_dump($b);
! 13: unset($a, $b);
! 14:
! 15: echo "\n" . '${\'a\'}' . "\n";
! 16: $b = $a = array('original');
! 17: foreach(${'a'} as $k=>&$v) {
! 18: $v = 'changed';
! 19: }
! 20: var_dump($b);
! 21: unset($a, $b);
! 22:
! 23: echo "\n" . '$$a' . "\n";
! 24: $a = 'blah';
! 25: $$a = array('original');
! 26: $b = $$a;
! 27: foreach($$a as $k=>&$v) {
! 28: $v = 'changed';
! 29: }
! 30: var_dump($b);
! 31: unset($a, $b);
! 32:
! 33: echo "\n" . '$a[0]' . "\n";
! 34: $b = $a[0] = array('original');
! 35: foreach($a[0] as $k=>&$v) {
! 36: $v = 'changed';
! 37: }
! 38: var_dump($b);
! 39: unset($a, $b);
! 40:
! 41: echo "\n" . '$a[0][0]' . "\n";
! 42: $b = $a[0][0] = array('original');
! 43: foreach($a[0][0] as $k=>&$v) {
! 44: $v = 'changed';
! 45: }
! 46: var_dump($b);
! 47: unset($a, $b);
! 48:
! 49: echo "\n" . '$a->b' . "\n";
! 50: $b = $a->b = array('original');
! 51: foreach($a->b as $k=>&$v) {
! 52: $v = 'changed';
! 53: }
! 54: var_dump($b);
! 55: unset($a, $b);
! 56:
! 57: echo "\n" . '$a->b->c' . "\n";
! 58: $b = $a->b->c = array('original');
! 59: foreach($a->b as $k=>&$v) {
! 60: $v = 'changed';
! 61: }
! 62: var_dump($b);
! 63: unset($a, $b);
! 64:
! 65: echo "\n" . '$a->b[0]' . "\n";
! 66: $b = $a->b[0] = array('original');
! 67: foreach($a->b[0] as $k=>&$v) {
! 68: $v = 'changed';
! 69: }
! 70: var_dump($b);
! 71: unset($a, $b);
! 72:
! 73: echo "\n" . '$a->b[0][0]' . "\n";
! 74: $b = $a->b[0][0] = array('original');
! 75: foreach($a->b[0][0] as $k=>&$v) {
! 76: $v = 'changed';
! 77: }
! 78: var_dump($b);
! 79: unset($a, $b);
! 80:
! 81: echo "\n" . '$a->b[0]->c' . "\n";
! 82: $b = $a->b[0]->c = array('original');
! 83: foreach($a->b[0]->c as $k=>&$v) {
! 84: $v = 'changed';
! 85: }
! 86: var_dump($b);
! 87: unset($a, $b);
! 88:
! 89: class C {
! 90: public static $a;
! 91: }
! 92:
! 93: echo "\n" . 'C::$a' . "\n";
! 94: C::$a = array('original');
! 95: $b = C::$a;
! 96: foreach(C::$a as $k=>&$v) {
! 97: $v = 'changed';
! 98: }
! 99: var_dump($b);
! 100: unset($a, $b);
! 101:
! 102: echo "\n" . 'C::$a[0]' . "\n";
! 103: C::$a[0] = array('original');
! 104: $b = C::$a[0];
! 105: foreach(C::$a[0] as $k=>&$v) {
! 106: $v = 'changed';
! 107: }
! 108: var_dump($b);
! 109: unset(C::$a[0], $b);
! 110:
! 111: echo "\n" . 'C::$a[0]->b' . "\n";
! 112: C::$a[0]->b = array('original');
! 113: $b = C::$a[0]->b;
! 114: foreach(C::$a[0]->b as $k=>&$v) {
! 115: $v = 'changed';
! 116: }
! 117: var_dump($b);
! 118: unset(C::$a[0]->b, $b);
! 119: ?>
! 120: --EXPECTF--
! 121:
! 122: $a
! 123: array(1) {
! 124: [0]=>
! 125: string(8) "original"
! 126: }
! 127:
! 128: ${'a'}
! 129: array(1) {
! 130: [0]=>
! 131: string(8) "original"
! 132: }
! 133:
! 134: $$a
! 135: array(1) {
! 136: [0]=>
! 137: string(8) "original"
! 138: }
! 139:
! 140: $a[0]
! 141: array(1) {
! 142: [0]=>
! 143: string(8) "original"
! 144: }
! 145:
! 146: $a[0][0]
! 147: array(1) {
! 148: [0]=>
! 149: string(8) "original"
! 150: }
! 151:
! 152: $a->b
! 153: array(1) {
! 154: [0]=>
! 155: string(8) "original"
! 156: }
! 157:
! 158: $a->b->c
! 159: array(1) {
! 160: [0]=>
! 161: string(8) "original"
! 162: }
! 163:
! 164: $a->b[0]
! 165: array(1) {
! 166: [0]=>
! 167: string(8) "original"
! 168: }
! 169:
! 170: $a->b[0][0]
! 171: array(1) {
! 172: [0]=>
! 173: string(8) "original"
! 174: }
! 175:
! 176: $a->b[0]->c
! 177: array(1) {
! 178: [0]=>
! 179: string(8) "original"
! 180: }
! 181:
! 182: C::$a
! 183: array(1) {
! 184: [0]=>
! 185: string(8) "original"
! 186: }
! 187:
! 188: C::$a[0]
! 189: array(1) {
! 190: [0]=>
! 191: string(8) "original"
! 192: }
! 193:
! 194: C::$a[0]->b
! 195: array(1) {
! 196: [0]=>
! 197: string(8) "original"
! 198: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>