Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

PHP Iterator Interface

บทนำ

Interface Iterator extends abstract Traversable interface PHP มี built-in iterators หลายตัว (เรียกว่า SPL iterators) สำหรับฟังก์ชันทั่วไป ตัวอย่างเช่น ArrayIterator, DirectoryIterator เป็นต้น คลาสของผู้ใช้ที่ implement Iterator interface ควร implement abstract methods ตามที่กำหนดไว้

ไวยากรณ์

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 }

เมธอด

Iterator::current - คืนค่า element ปัจจุบัน

Iterator::key - คืนค่าคีย์ของ element ปัจจุบัน

Iterator::next - เคลื่อนไปยัง element ถัดไป

Iterator::rewind - Rewind iterator กลับไปที่ element แรก

Iterator::valid - ตรวจสอบว่าตำแหน่งปัจจุบันถูกต้องหรือไม่

เมื่อ implement IteratorAggregate หรือ Iterator interface ที่ extends Traversable ต้องระบุลำดับก่อนชื่อใน clause implements

Iterator Example

ใน PHP script ต่อไปนี้ คลาสที่ implement Interface มีอาร์เรย์เป็น private variable ด้วยการ implement abstract methods ของ Iterator สามารถวนลูปอาร์เรย์ด้วย foreach loop และเมธอด next() ได้

ตัวอย่าง

<?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]); } } ?>

ใช้ foreach loop วนลูป property array ของ MyIterator object

$it = new myIterator(); foreach($it as $key => $value) { echo "$key=>" . $value . "\n"; }

การวนลูปยังสามารถทำได้โดยเรียกเมธอด next() ใน while loop ต้อง rewind iterator ก่อนเริ่มลูป

ตัวอย่าง

$it->rewind(); do { echo $it->key() . "=>" . $it->current() . "\n"; $it->next(); } while ($it->valid());

ผลลัพธ์

ทั้งสองครั้ง การวนลูป property array แสดงผลดังนี้

0=>10 1=>20 2=>30 3=>40