foreachLoop.016.phpt 3.2 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. $b = $a->b = array('original');
  44. foreach($a->b as $k=>&$v) {
  45. $v = 'changed';
  46. }
  47. var_dump($b);
  48. unset($a, $b);
  49. echo "\n" . '$a->b->c' . "\n";
  50. $b = $a->b->c = array('original');
  51. foreach($a->b as $k=>&$v) {
  52. $v = 'changed';
  53. }
  54. var_dump($b);
  55. unset($a, $b);
  56. echo "\n" . '$a->b[0]' . "\n";
  57. $b = $a->b[0] = array('original');
  58. foreach($a->b[0] as $k=>&$v) {
  59. $v = 'changed';
  60. }
  61. var_dump($b);
  62. unset($a, $b);
  63. echo "\n" . '$a->b[0][0]' . "\n";
  64. $b = $a->b[0][0] = array('original');
  65. foreach($a->b[0][0] as $k=>&$v) {
  66. $v = 'changed';
  67. }
  68. var_dump($b);
  69. unset($a, $b);
  70. echo "\n" . '$a->b[0]->c' . "\n";
  71. $b = $a->b[0]->c = array('original');
  72. foreach($a->b[0]->c as $k=>&$v) {
  73. $v = 'changed';
  74. }
  75. var_dump($b);
  76. unset($a, $b);
  77. class C {
  78. public static $a;
  79. }
  80. echo "\n" . 'C::$a' . "\n";
  81. C::$a = array('original');
  82. $b = C::$a;
  83. foreach(C::$a as $k=>&$v) {
  84. $v = 'changed';
  85. }
  86. var_dump($b);
  87. unset($a, $b);
  88. echo "\n" . 'C::$a[0]' . "\n";
  89. C::$a[0] = array('original');
  90. $b = C::$a[0];
  91. foreach(C::$a[0] as $k=>&$v) {
  92. $v = 'changed';
  93. }
  94. var_dump($b);
  95. unset(C::$a[0], $b);
  96. echo "\n" . 'C::$a[0]->b' . "\n";
  97. C::$a[0]->b = array('original');
  98. $b = C::$a[0]->b;
  99. foreach(C::$a[0]->b as $k=>&$v) {
  100. $v = 'changed';
  101. }
  102. var_dump($b);
  103. unset(C::$a[0]->b, $b);
  104. ?>
  105. --EXPECTF--
  106. $a
  107. array(1) {
  108. [0]=>
  109. string(8) "original"
  110. }
  111. ${'a'}
  112. array(1) {
  113. [0]=>
  114. string(8) "original"
  115. }
  116. $$a
  117. array(1) {
  118. [0]=>
  119. string(8) "original"
  120. }
  121. $a[0]
  122. array(1) {
  123. [0]=>
  124. string(8) "original"
  125. }
  126. $a[0][0]
  127. array(1) {
  128. [0]=>
  129. string(8) "original"
  130. }
  131. $a->b
  132. Warning: Creating default object from empty value in %s on line %d
  133. array(1) {
  134. [0]=>
  135. string(8) "original"
  136. }
  137. $a->b->c
  138. Warning: Creating default object from empty value in %s on line %d
  139. array(1) {
  140. [0]=>
  141. string(8) "original"
  142. }
  143. $a->b[0]
  144. array(1) {
  145. [0]=>
  146. string(8) "original"
  147. }
  148. $a->b[0][0]
  149. array(1) {
  150. [0]=>
  151. string(8) "original"
  152. }
  153. $a->b[0]->c
  154. Warning: Creating default object from empty value in %s on line %d
  155. array(1) {
  156. [0]=>
  157. string(8) "original"
  158. }
  159. C::$a
  160. array(1) {
  161. [0]=>
  162. string(8) "original"
  163. }
  164. C::$a[0]
  165. array(1) {
  166. [0]=>
  167. string(8) "original"
  168. }
  169. C::$a[0]->b
  170. Warning: Creating default object from empty value in %s on line %d
  171. array(1) {
  172. [0]=>
  173. string(8) "original"
  174. }