* @since 2.0.8 */ class TraversableObject implements Iterator, Countable { protected $data; private $position = 0; public function __construct(array $array) { $this->data = $array; } /** * @throws Exception * @since 5.1.0 */ #[ReturnTypeWillChange] public function count() { throw new Exception('Count called on object that should only be traversed.'); } /** * {@inheritdoc} */ #[ReturnTypeWillChange] public function current() { return $this->data[$this->position]; } /** * {@inheritdoc} */ public function next(): void { $this->position++; } /** * {@inheritdoc} */ public function key(): int { return $this->position; } /** * {@inheritdoc} */ public function valid(): bool { return array_key_exists($this->position, $this->data); } /** * {@inheritdoc} */ public function rewind(): void { $this->position = 0; } }