1--TEST--
2DatePeriod can be used as an IteratorAggregate
3--FILE--
4<?php
5
6$period = new DatePeriod('R2/2012-07-01T00:00:00Z/P7D');
7foreach ($period as $i => $date) {
8    echo "$i: ", $date->format('Y-m-d'), "\n";
9}
10
11echo "\n";
12foreach ($period->getIterator() as $i => $date) {
13    echo "$i: ", $date->format('Y-m-d'), "\n";
14}
15
16echo "\n";
17$iter = $period->getIterator();
18for (; $iter->valid(); $iter->next()) {
19    $i = $iter->key();
20    $date = $iter->current();
21    echo "$i: ", $date->format('Y-m-d'), "\n";
22}
23
24echo "\n";
25$iter->rewind();
26for (; $iter->valid(); $iter->next()) {
27    $i = $iter->key();
28    $date = $iter->current();
29    echo "$i: ", $date->format('Y-m-d'), "\n";
30}
31
32echo "\n";
33foreach (new IteratorIterator($period) as $i => $date) {
34    echo "$i: ", $date->format('Y-m-d'), "\n";
35}
36
37// Extension that does not overwrite getIterator().
38class MyDatePeriod1 extends DatePeriod {
39}
40
41echo "\n";
42$period = new MyDatePeriod1('R2/2012-07-01T00:00:00Z/P7D');
43foreach ($period as $i => $date) {
44    echo "$i: ", $date->format('Y-m-d'), "\n";
45}
46
47// Extension that does overwrite getIterator().
48class MyDatePeriod2 extends DatePeriod {
49    public function getIterator(): Iterator {
50        return new ArrayIterator([1, 2, 3]);
51    }
52}
53
54echo "\n";
55$period = new MyDatePeriod2('R2/2012-07-01T00:00:00Z/P7D');
56foreach ($period as $i => $notDate) {
57    echo "$i: $notDate\n";
58}
59
60?>
61--EXPECTF--
62Deprecated: Calling DatePeriod::__construct(string $isostr, int $options = 0) is deprecated, use DatePeriod::createFromISO8601String() instead in %s on line %d
630: 2012-07-01
641: 2012-07-08
652: 2012-07-15
66
670: 2012-07-01
681: 2012-07-08
692: 2012-07-15
70
710: 2012-07-01
721: 2012-07-08
732: 2012-07-15
74
750: 2012-07-01
761: 2012-07-08
772: 2012-07-15
78
790: 2012-07-01
801: 2012-07-08
812: 2012-07-15
82
83
84Deprecated: Calling DatePeriod::__construct(string $isostr, int $options = 0) is deprecated, use DatePeriod::createFromISO8601String() instead in %s on line %d
850: 2012-07-01
861: 2012-07-08
872: 2012-07-15
88
89
90Deprecated: Calling DatePeriod::__construct(string $isostr, int $options = 0) is deprecated, use DatePeriod::createFromISO8601String() instead in %s on line %d
910: 1
921: 2
932: 3
94