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

อินเตอร์เฟส PHP Iterable


แนะนำตัว

ตัววนซ้ำ อินเทอร์เฟซขยายนามธรรม สำรวจได้ อินเตอร์เฟซ. 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