weakmap_iteration.phpt 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. --TEST--
  2. WeakMap iteration
  3. --FILE--
  4. <?php
  5. $map = new WeakMap;
  6. echo "\nEmpty loop:\n";
  7. foreach ($map as $key => $value) {
  8. var_dump($key, $value);
  9. }
  10. echo "\nSimple loop:\n";
  11. $obj0 = new stdClass;
  12. $obj1 = new stdClass;
  13. $obj2 = new stdClass;
  14. $map[$obj0] = 0;
  15. $map[$obj1] = 1;
  16. $map[$obj2] = 2;
  17. foreach ($map as $key => $value) {
  18. var_dump($key, $value);
  19. }
  20. echo "\nObject removed during loop:\n";
  21. foreach ($map as $key => $value) {
  22. if (isset($obj1) && $key === $obj1) unset($obj1);
  23. var_dump($key, $value);
  24. }
  25. echo "\nBy reference iteration:\n";
  26. foreach ($map as $key => &$value) {
  27. $value++;
  28. }
  29. var_dump($map);
  30. ?>
  31. --EXPECT--
  32. Empty loop:
  33. Simple loop:
  34. object(stdClass)#2 (0) {
  35. }
  36. int(0)
  37. object(stdClass)#3 (0) {
  38. }
  39. int(1)
  40. object(stdClass)#4 (0) {
  41. }
  42. int(2)
  43. Object removed during loop:
  44. object(stdClass)#2 (0) {
  45. }
  46. int(0)
  47. object(stdClass)#3 (0) {
  48. }
  49. int(1)
  50. object(stdClass)#4 (0) {
  51. }
  52. int(2)
  53. By reference iteration:
  54. object(WeakMap)#1 (2) {
  55. [0]=>
  56. array(2) {
  57. ["key"]=>
  58. object(stdClass)#2 (0) {
  59. }
  60. ["value"]=>
  61. &int(1)
  62. }
  63. [1]=>
  64. array(2) {
  65. ["key"]=>
  66. object(stdClass)#4 (0) {
  67. }
  68. ["value"]=>
  69. &int(3)
  70. }
  71. }