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