Giới thiệu
Từ PHP 5 trở đi, có thể lặp qua danh sách tất cả các mục hiển thị của một đối tượng. Có thể thực hiện lặp lại bằng cách sử dụng foreach vòng lặp cũng như trình lặp giao diện. Ngoài ra còn có IteratorAggregate giao diện bằng PHP, có thể được sử dụng cho mục đích này
Sử dụng vòng lặp foreach
Ví dụ
<?php class myclass{ private $var; protected $var1; public $x, $y, $z; public function __construct(){ $this->var="private variable"; $this->var1=TRUE; $this->x=100; $this->y=200; $this->z=300; } public function iterate(){ foreach ($this as $key => $value) { print "$key => $value\n"; } } } $obj = new myclass(); foreach($obj as $key => $value) { print "$key => $value\n"; } echo "\n"; $obj->iterate(); ?>
Đầu ra
Kết quả như bên dưới -
x => 100 y => 200 z => 300 var => private variable var1 => 1 x => 100 y => 200 z => 300
Sử dụng giao diện lặp lại
Giao diện này định nghĩa các phương thức trừu tượng sau sẽ được đưa vào trong ví dụ sau
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
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
Ví dụ sau minh họa sự lặp lại đối tượng bằng cách triển khai giao diện Iterator
Ví dụ
<?php class myclass implements Iterator{ private $arr = array('a','b','c'); public function rewind(){ echo "rewinding\n"; reset($this->arr); } public function current(){ $var = current($this->arr); echo "current: $var\n"; return $var; } public function key() { $var = key($this->arr); echo "key: $var\n"; return $var; } public function next() { $var = next($this->arr); echo "next: $var\n"; return $var; } public function valid(){ $key = key($this->arr); $var = ($key !== NULL && $key !== FALSE); echo "valid: $var\n"; return $var; } } $obj = new myclass(); foreach ($obj as $k => $v) { print "$k: $v\n"; } ?>
Đầu ra
Đoạn mã trên tạo ra kết quả sau -
rewinding valid: 1 current: a key: 0 0: a next: b valid: 1 current: b key: 1 1: b next: c valid: 1 current: c key: 2 2: c next: valid: