DatePeriod_IteratorAggregate.phpt 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. --TEST--
  2. DatePeriod can be used as an IteratorAggregate
  3. --FILE--
  4. <?php
  5. $period = new DatePeriod('R2/2012-07-01T00:00:00Z/P7D');
  6. foreach ($period as $i => $date) {
  7. echo "$i: ", $date->format('Y-m-d'), "\n";
  8. }
  9. echo "\n";
  10. foreach ($period->getIterator() as $i => $date) {
  11. echo "$i: ", $date->format('Y-m-d'), "\n";
  12. }
  13. echo "\n";
  14. $iter = $period->getIterator();
  15. for (; $iter->valid(); $iter->next()) {
  16. $i = $iter->key();
  17. $date = $iter->current();
  18. echo "$i: ", $date->format('Y-m-d'), "\n";
  19. }
  20. echo "\n";
  21. $iter->rewind();
  22. for (; $iter->valid(); $iter->next()) {
  23. $i = $iter->key();
  24. $date = $iter->current();
  25. echo "$i: ", $date->format('Y-m-d'), "\n";
  26. }
  27. echo "\n";
  28. foreach (new IteratorIterator($period) as $i => $date) {
  29. echo "$i: ", $date->format('Y-m-d'), "\n";
  30. }
  31. // Extension that does not overwrite getIterator().
  32. class MyDatePeriod1 extends DatePeriod {
  33. }
  34. echo "\n";
  35. $period = new MyDatePeriod1('R2/2012-07-01T00:00:00Z/P7D');
  36. foreach ($period as $i => $date) {
  37. echo "$i: ", $date->format('Y-m-d'), "\n";
  38. }
  39. // Extension that does overwrite getIterator().
  40. class MyDatePeriod2 extends DatePeriod {
  41. public function getIterator(): Iterator {
  42. return new ArrayIterator([1, 2, 3]);
  43. }
  44. }
  45. echo "\n";
  46. $period = new MyDatePeriod2('R2/2012-07-01T00:00:00Z/P7D');
  47. foreach ($period as $i => $notDate) {
  48. echo "$i: $notDate\n";
  49. }
  50. ?>
  51. --EXPECT--
  52. 0: 2012-07-01
  53. 1: 2012-07-08
  54. 2: 2012-07-15
  55. 0: 2012-07-01
  56. 1: 2012-07-08
  57. 2: 2012-07-15
  58. 0: 2012-07-01
  59. 1: 2012-07-08
  60. 2: 2012-07-15
  61. 0: 2012-07-01
  62. 1: 2012-07-08
  63. 2: 2012-07-15
  64. 0: 2012-07-01
  65. 1: 2012-07-08
  66. 2: 2012-07-15
  67. 0: 2012-07-01
  68. 1: 2012-07-08
  69. 2: 2012-07-15
  70. 0: 1
  71. 1: 2
  72. 2: 3