foreachLoop.016.phpt 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  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. echo "\n" . '$a' . "\n";
  6. $b = $a = array('original');
  7. foreach($a as $k=>&$v) {
  8. $v = 'changed';
  9. }
  10. var_dump($b);
  11. unset($a, $b);
  12. echo "\n" . '${\'a\'}' . "\n";
  13. $b = $a = array('original');
  14. foreach(${'a'} as $k=>&$v) {
  15. $v = 'changed';
  16. }
  17. var_dump($b);
  18. unset($a, $b);
  19. echo "\n" . '$$a' . "\n";
  20. $a = 'blah';
  21. $$a = array('original');
  22. $b = $$a;
  23. foreach($$a as $k=>&$v) {
  24. $v = 'changed';
  25. }
  26. var_dump($b);
  27. unset($a, $b);
  28. echo "\n" . '$a[0]' . "\n";
  29. $b = $a[0] = array('original');
  30. foreach($a[0] as $k=>&$v) {
  31. $v = 'changed';
  32. }
  33. var_dump($b);
  34. unset($a, $b);
  35. echo "\n" . '$a[0][0]' . "\n";
  36. $b = $a[0][0] = array('original');
  37. foreach($a[0][0] as $k=>&$v) {
  38. $v = 'changed';
  39. }
  40. var_dump($b);
  41. unset($a, $b);
  42. echo "\n" . '$a->b' . "\n";
  43. $a = new stdClass;
  44. $b = $a->b = array('original');
  45. foreach($a->b as $k=>&$v) {
  46. $v = 'changed';
  47. }
  48. var_dump($b);
  49. unset($a, $b);
  50. echo "\n" . '$a->b->c' . "\n";
  51. $a = new stdClass;
  52. $a->b = new stdClass;
  53. $b = $a->b->c = array('original');
  54. foreach($a->b as $k=>&$v) {
  55. $v = 'changed';
  56. }
  57. var_dump($b);
  58. unset($a, $b);
  59. echo "\n" . '$a->b[0]' . "\n";
  60. $a = new stdClass;
  61. $b = $a->b[0] = array('original');
  62. foreach($a->b[0] as $k=>&$v) {
  63. $v = 'changed';
  64. }
  65. var_dump($b);
  66. unset($a, $b);
  67. echo "\n" . '$a->b[0][0]' . "\n";
  68. $a = new stdClass;
  69. $b = $a->b[0][0] = array('original');
  70. foreach($a->b[0][0] as $k=>&$v) {
  71. $v = 'changed';
  72. }
  73. var_dump($b);
  74. unset($a, $b);
  75. echo "\n" . '$a->b[0]->c' . "\n";
  76. $a = new stdClass;
  77. $a->b[0] = new stdClass;
  78. $b = $a->b[0]->c = array('original');
  79. foreach($a->b[0]->c as $k=>&$v) {
  80. $v = 'changed';
  81. }
  82. var_dump($b);
  83. unset($a, $b);
  84. class C {
  85. public static $a;
  86. }
  87. echo "\n" . 'C::$a' . "\n";
  88. C::$a = array('original');
  89. $b = C::$a;
  90. foreach(C::$a as $k=>&$v) {
  91. $v = 'changed';
  92. }
  93. var_dump($b);
  94. unset($a, $b);
  95. echo "\n" . 'C::$a[0]' . "\n";
  96. C::$a[0] = array('original');
  97. $b = C::$a[0];
  98. foreach(C::$a[0] as $k=>&$v) {
  99. $v = 'changed';
  100. }
  101. var_dump($b);
  102. unset(C::$a[0], $b);
  103. echo "\n" . 'C::$a[0]->b' . "\n";
  104. C::$a[0] = new stdClass;
  105. C::$a[0]->b = array('original');
  106. $b = C::$a[0]->b;
  107. foreach(C::$a[0]->b as $k=>&$v) {
  108. $v = 'changed';
  109. }
  110. var_dump($b);
  111. unset(C::$a[0]->b, $b);
  112. ?>
  113. --EXPECT--
  114. $a
  115. array(1) {
  116. [0]=>
  117. string(8) "original"
  118. }
  119. ${'a'}
  120. array(1) {
  121. [0]=>
  122. string(8) "original"
  123. }
  124. $$a
  125. array(1) {
  126. [0]=>
  127. string(8) "original"
  128. }
  129. $a[0]
  130. array(1) {
  131. [0]=>
  132. string(8) "original"
  133. }
  134. $a[0][0]
  135. array(1) {
  136. [0]=>
  137. string(8) "original"
  138. }
  139. $a->b
  140. array(1) {
  141. [0]=>
  142. string(8) "original"
  143. }
  144. $a->b->c
  145. array(1) {
  146. [0]=>
  147. string(8) "original"
  148. }
  149. $a->b[0]
  150. array(1) {
  151. [0]=>
  152. string(8) "original"
  153. }
  154. $a->b[0][0]
  155. array(1) {
  156. [0]=>
  157. string(8) "original"
  158. }
  159. $a->b[0]->c
  160. array(1) {
  161. [0]=>
  162. string(8) "original"
  163. }
  164. C::$a
  165. array(1) {
  166. [0]=>
  167. string(8) "original"
  168. }
  169. C::$a[0]
  170. array(1) {
  171. [0]=>
  172. string(8) "original"
  173. }
  174. C::$a[0]->b
  175. array(1) {
  176. [0]=>
  177. string(8) "original"
  178. }