foreachLoop.016.phpt 3.5 KB

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