แนะนำตัว
ตัววนซ้ำ อินเทอร์เฟซขยายนามธรรม สำรวจได้ อินเตอร์เฟซ. PHP มีตัววนซ้ำในตัวจำนวนมาก (เรียกว่า ตัววนซ้ำ SPL ) สำหรับฟังก์ชันการทำงานประจำมากมาย ตัวอย่างคือ ArrayIterator , DirectoryIterator เป็นต้น คลาสผู้ใช้ที่ใช้อินเทอร์เฟซ Iterator ควรใช้วิธีนามธรรมตามที่กำหนดไว้
ไวยากรณ์
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 }
วิธีการ
Iterator::current — คืนค่าองค์ประกอบปัจจุบัน
Iterator::key — คืนค่าคีย์ขององค์ประกอบปัจจุบัน
Iterator::next — เลื่อนไปยังองค์ประกอบถัดไป
Iterator::rewind — ย้อนกลับ Iterator ไปยังองค์ประกอบแรก
Iterator::valid — ตรวจสอบว่าตำแหน่งปัจจุบันถูกต้องหรือไม่
เมื่อใช้งาน IteratorAggregate หรือ ตัววนซ้ำ ส่วนต่อประสานที่ขยาย Traversable จะต้องระบุไว้ก่อนชื่อใน การใช้งาน ข้อ
ตัวอย่าง Iterator
ในสคริปต์ PHP ต่อไปนี้ คลาสที่ใช้อินเทอร์เฟซมีอาร์เรย์เป็นตัวแปรส่วนตัว การใช้วิธีการนามธรรมของ Iterator เราสามารถสำรวจอาร์เรย์โดยใช้ foreach วนซ้ำด้วย 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 วนซ้ำเราสามารถวนซ้ำคุณสมบัติอาร์เรย์ของวัตถุ MyIterator
$it = new myIterator(); foreach($it as $key => $value) { echo "$key=>". $value ."\n"; }
ทำซ้ำได้ด้วยการคลิก next() วิธีการในขณะที่วนรอบ อย่าลืมกรอกลับ ตัววนซ้ำก่อนเริ่มลูป
ตัวอย่าง
$it->rewind(); do { echo $it->key() . "=>" .$it->current() . "\n"; $it->next(); } while ($it->valid());
ผลลัพธ์
ในทั้งสองกรณี การข้ามผ่านคุณสมบัติอาร์เรย์จะแสดงผลลัพธ์ดังต่อไปนี้
0=>10 1=>20 2=>30 3=>40