1--TEST-- 2SPL: NoRewindIterator 3--FILE-- 4<?php 5 6class ArrayIteratorEx extends ArrayIterator 7{ 8 function rewind(): void 9 { 10 echo __METHOD__ . "\n"; 11 parent::rewind(); 12 } 13 function valid(): bool 14 { 15 echo __METHOD__ . "\n"; 16 return parent::valid(); 17 } 18 function current(): mixed 19 { 20 echo __METHOD__ . "\n"; 21 return parent::current(); 22 } 23 function key(): string|int|null 24 { 25 echo __METHOD__ . "\n"; 26 return parent::key(); 27 } 28 function next(): void 29 { 30 echo __METHOD__ . "\n"; 31 parent::next(); 32 } 33} 34 35class NoRewindIteratorEx extends NoRewindIterator 36{ 37 function rewind(): void 38 { 39 echo __METHOD__ . "\n"; 40 parent::rewind(); 41 } 42 function valid(): bool 43 { 44 echo __METHOD__ . "\n"; 45 return parent::valid(); 46 } 47 function current(): mixed 48 { 49 echo __METHOD__ . "\n"; 50 return parent::current(); 51 } 52 function key(): mixed 53 { 54 echo __METHOD__ . "\n"; 55 return parent::key(); 56 } 57 function next(): void 58 { 59 echo __METHOD__ . "\n"; 60 parent::next(); 61 } 62} 63 64$it = new NoRewindIteratorEx(new ArrayIteratorEx(range(0,3))); 65 66echo "===0===\n"; 67foreach ($it->getInnerIterator() as $v) { 68 var_dump($v); 69} 70 71echo "===1===\n"; 72foreach ($it as $v) { 73 var_dump($v); 74} 75 76$pos =0; 77 78$it = new NoRewindIteratorEx(new ArrayIteratorEx(range(0,3))); 79 80echo "===2===\n"; 81foreach ($it as $v) { 82 var_dump($v); 83 if ($pos++ > 1) { 84 break; 85 } 86} 87 88echo "===3===\n"; 89foreach ($it as $v) { 90 var_dump($v); 91} 92 93echo "===4===\n"; 94foreach ($it as $v) { 95 var_dump($v); 96} 97?> 98--EXPECT-- 99===0=== 100ArrayIteratorEx::rewind 101ArrayIteratorEx::valid 102ArrayIteratorEx::current 103int(0) 104ArrayIteratorEx::next 105ArrayIteratorEx::valid 106ArrayIteratorEx::current 107int(1) 108ArrayIteratorEx::next 109ArrayIteratorEx::valid 110ArrayIteratorEx::current 111int(2) 112ArrayIteratorEx::next 113ArrayIteratorEx::valid 114ArrayIteratorEx::current 115int(3) 116ArrayIteratorEx::next 117ArrayIteratorEx::valid 118===1=== 119NoRewindIteratorEx::rewind 120NoRewindIteratorEx::valid 121ArrayIteratorEx::valid 122===2=== 123NoRewindIteratorEx::rewind 124NoRewindIteratorEx::valid 125ArrayIteratorEx::valid 126NoRewindIteratorEx::current 127ArrayIteratorEx::current 128int(0) 129NoRewindIteratorEx::next 130ArrayIteratorEx::next 131NoRewindIteratorEx::valid 132ArrayIteratorEx::valid 133NoRewindIteratorEx::current 134ArrayIteratorEx::current 135int(1) 136NoRewindIteratorEx::next 137ArrayIteratorEx::next 138NoRewindIteratorEx::valid 139ArrayIteratorEx::valid 140NoRewindIteratorEx::current 141ArrayIteratorEx::current 142int(2) 143===3=== 144NoRewindIteratorEx::rewind 145NoRewindIteratorEx::valid 146ArrayIteratorEx::valid 147NoRewindIteratorEx::current 148int(2) 149NoRewindIteratorEx::next 150ArrayIteratorEx::next 151NoRewindIteratorEx::valid 152ArrayIteratorEx::valid 153NoRewindIteratorEx::current 154ArrayIteratorEx::current 155int(3) 156NoRewindIteratorEx::next 157ArrayIteratorEx::next 158NoRewindIteratorEx::valid 159ArrayIteratorEx::valid 160===4=== 161NoRewindIteratorEx::rewind 162NoRewindIteratorEx::valid 163ArrayIteratorEx::valid 164