Giới thiệu
Trình lặp lại giao diện mở rộng trừu tượng Có thể duyệt qua giao diện. PHP cung cấp nhiều trình vòng lặp tích hợp sẵn (được gọi là trình vòng lặp SPL ) cho nhiều chức năng thông thường. Ví dụ là ArrayIterator , DirectoryIterator v.v ... Một lớp người dùng triển khai giao diện Iterator nên triển khai các phương thức trừu tượng như được định nghĩa trong đó.
Cú pháp
Iterator extends Traversable { /* Methods */ 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 pháp
Iterator ::current - Trả về phần tử hiện tại
Iterator ::key - Trả về khóa của phần tử hiện tại
Lặp lại ::tiếp theo - Chuyển tiếp đến phần tử tiếp theo
Trình lặp lại ::tua lại - Tua lại Trình lặp lại thành phần tử đầu tiên
Trình lặp lại ::hợp lệ - Kiểm tra xem vị trí hiện tại có hợp lệ không
Khi triển khai IteratorAggregate hoặc Trình lặp lại giao diện mở rộng Có thể duyệt, chúng phải được liệt kê trước tên của nó trong triển khai mệnh đề.
Ví dụ về lặp lại
Trong tập lệnh PHP sau, một lớp thực thi Giao diện chứa một mảng là biến riêng. Triển khai các phương thức trừu tượng của Iterator, chúng ta có thể duyệt qua mảng bằng cách sử dụng foreach vòng lặp cũng như với next () phương pháp.
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]); } } ?>
Sử dụng foreach vòng lặp, chúng ta có thể lặp qua thuộc tính mảng của đối tượng MyIterator
$it = new myIterator(); foreach($it as $key => $value) { echo "$key=>". $value ."\n"; }
Lặp lại cũng có thể được thực hiện bằng cách clling next () phương thức trong vòng lặp while. Đảm bảo tua lại trình lặp trước khi bắt đầu vòng lặp
Ví dụ
$it->rewind(); do { echo $it->key() . "=>" .$it->current() . "\n"; $it->next(); } while ($it->valid());
Đầu ra
Trong cả hai trường hợp, việc duyệt qua thuộc tính mảng sẽ hiển thị kết quả sau
0=>10 1=>20 2=>30 3=>40