Giới thiệu
Interface Iterator kế thừa interface trừu tượng Traversable. PHP cung cấp nhiều iterator tích hợp (gọi là SPL iterators) cho nhiều chức năng thông dụng. Ví dụ: ArrayIterator, DirectoryIterator v.v. Class user triển khai Iterator phải triển khai các phương thức trừu tượng trong nó.
Cú pháp
Iterator extends Traversable { abstract public current ( void ) : mixed abstract public key ( void ) : scalar abstract public next ( void ) : void abstract public rewind ( void ) : void abstract public valid ( void ) : bool }Phương thức
- Iterator::current - Trả về phần tử hiện tại.
- Iterator::key - Trả về khóa phần tử hiện tại.
- Iterator::next - Tiến đến phần tử tiếp theo.
- Iterator::rewind - Quay lại phần tử đầu tiên.
- Iterator::valid - Kiểm tra vị trí hiện tại hợp lệ.
Khi triển khai IteratorAggregate hoặc Iterator (kế thừa Traversable), phải liệt kê trước tên trong mệnh đề implements.
Ví dụ Iterator
Script PHP: class triển khai Interface chứa mảng private. Triển khai phương thức trừu tượng của Iterator, duyệt mảng bằng foreach và next().
Ví dụ
<?php class myIterator implements Iterator { private $index = 0; private $arr = array(10, 20, 30, 40); public function __construct() { $this->index = 0; } public function rewind() { $this->index = 0; } public function current() { return $this->arr[$this->index]; } public function key() { return $this->index; } public function next() { ++$this->index; } public function valid() { return isset($this->arr[$this->index]); } } ?>Dùng foreach duyệt mảng:
$it = new myIterator(); foreach ($it as $key => $value) { echo "$key => " . $value . "\n"; }Duyệt cũng bằng gọi next() trong while. Phải rewind trước vòng lặp:
Ví dụ
$it->rewind(); do { echo $it->key() . " => " . $it->current() . "\n"; $it->next(); } while ($it->valid());Kết quả
0 => 10 1 => 20 2 => 30 3 => 40