foreachLoopObjects.006.phpt 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. --TEST--
  2. Foreach loop tests - substituting the entire iterated entity during the loop.
  3. --FILE--
  4. <?php
  5. class C {
  6. public $a = "Original a";
  7. public $b = "Original b";
  8. public $c = "Original c";
  9. public $d = "Original d";
  10. public $e = "Original e";
  11. }
  12. echo "\nSubstituting the iterated object for a different object.\n";
  13. $obj = new C;
  14. $obj2 = new stdclass;
  15. $obj2->a = "new a";
  16. $obj2->b = "new b";
  17. $obj2->c = "new c";
  18. $obj2->d = "new d";
  19. $obj2->e = "new e";
  20. $obj2->f = "new f";
  21. $ref = &$obj;
  22. $count=0;
  23. foreach ($obj as $v) {
  24. var_dump($v);
  25. if ($v==$obj->b) {
  26. $ref=$obj2;
  27. }
  28. if (++$count>10) {
  29. echo "Loop detected.\n";
  30. break;
  31. }
  32. }
  33. var_dump($obj);
  34. echo "\nSubstituting the iterated object for an array.\n";
  35. $obj = new C;
  36. $a = array(1,2,3,4,5,6,7,8);
  37. $ref = &$obj;
  38. $count=0;
  39. foreach ($obj as $v) {
  40. var_dump($v);
  41. if ($v==="Original b") {
  42. $ref=$a;
  43. }
  44. if (++$count>10) {
  45. echo "Loop detected.\n";
  46. break;
  47. }
  48. }
  49. var_dump($obj);
  50. echo "\nSubstituting the iterated array for an object.\n";
  51. $a = array(1,2,3,4,5,6,7,8);
  52. $obj = new C;
  53. $ref = &$a;
  54. $count=0;
  55. foreach ($a as $v) {
  56. var_dump($v);
  57. if ($v===2) {
  58. $ref=$obj;
  59. }
  60. if (++$count>10) {
  61. echo "Loop detected.\n";
  62. break;
  63. }
  64. }
  65. var_dump($obj);
  66. ?>
  67. --EXPECTF--
  68. Substituting the iterated object for a different object.
  69. string(10) "Original a"
  70. string(10) "Original b"
  71. string(10) "Original c"
  72. string(10) "Original d"
  73. string(10) "Original e"
  74. object(stdClass)#%d (6) {
  75. ["a"]=>
  76. string(5) "new a"
  77. ["b"]=>
  78. string(5) "new b"
  79. ["c"]=>
  80. string(5) "new c"
  81. ["d"]=>
  82. string(5) "new d"
  83. ["e"]=>
  84. string(5) "new e"
  85. ["f"]=>
  86. string(5) "new f"
  87. }
  88. Substituting the iterated object for an array.
  89. string(10) "Original a"
  90. string(10) "Original b"
  91. string(10) "Original c"
  92. string(10) "Original d"
  93. string(10) "Original e"
  94. array(8) {
  95. [0]=>
  96. int(1)
  97. [1]=>
  98. int(2)
  99. [2]=>
  100. int(3)
  101. [3]=>
  102. int(4)
  103. [4]=>
  104. int(5)
  105. [5]=>
  106. int(6)
  107. [6]=>
  108. int(7)
  109. [7]=>
  110. int(8)
  111. }
  112. Substituting the iterated array for an object.
  113. int(1)
  114. int(2)
  115. int(3)
  116. int(4)
  117. int(5)
  118. int(6)
  119. int(7)
  120. int(8)
  121. object(C)#%d (5) {
  122. ["a"]=>
  123. string(10) "Original a"
  124. ["b"]=>
  125. string(10) "Original b"
  126. ["c"]=>
  127. string(10) "Original c"
  128. ["d"]=>
  129. string(10) "Original d"
  130. ["e"]=>
  131. string(10) "Original e"
  132. }