1--TEST-- 2ZE2 iterators and exceptions 3--FILE-- 4<?php 5class Test implements Iterator 6{ 7 public $arr = array(1, 2, 3); 8 public $x = 0; 9 10 public function rewind(): void { if ($this->x == 0) throw new Exception(__METHOD__); reset($this->arr); } 11 public function current(): mixed { if ($this->x == 1) throw new Exception(__METHOD__); return current($this->arr); } 12 public function key(): mixed { if ($this->x == 2) throw new Exception(__METHOD__); return key($this->arr); } 13 public function next(): void { if ($this->x == 3) throw new Exception(__METHOD__); next($this->arr); } 14 public function valid(): bool { if ($this->x == 4) throw new Exception(__METHOD__); return (key($this->arr) !== NULL); } 15} 16 17$t = new Test(); 18 19while($t->x < 5) 20{ 21 try 22 { 23 foreach($t as $k => $v) 24 { 25 echo "Current\n"; 26 } 27 } 28 catch(Exception $e) 29 { 30 echo "Caught in " . $e->getMessage() . "()\n"; 31 } 32 $t->x++; 33} 34?> 35--EXPECT-- 36Caught in Test::rewind() 37Caught in Test::current() 38Caught in Test::key() 39Current 40Caught in Test::next() 41Caught in Test::valid() 42