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

เครื่องกำเนิด PHP เทียบกับวัตถุ Iterator


แนะนำตัว

เมื่อเรียกใช้ฟังก์ชันตัวสร้าง ภายใน อ็อบเจ็กต์ใหม่ของคลาสตัวสร้างจะถูกส่งกลับ มันใช้ ตัววนซ้ำ อินเตอร์เฟซ. อินเทอร์เฟซตัววนซ้ำกำหนดวิธีการที่เป็นนามธรรมดังต่อไปนี้

  • Iterator::current — คืนองค์ประกอบปัจจุบัน
  • Iterator::key — ส่งคืนคีย์ขององค์ประกอบปัจจุบัน
  • Iterator::next — เลื่อนไปยังองค์ประกอบถัดไป
  • Iterator::rewind — ย้อนกลับ Iterator ไปยังองค์ประกอบแรก
  • Iterator::valid — ตรวจสอบว่าตำแหน่งปัจจุบันถูกต้องหรือไม่

ตัวสร้างทำหน้าที่เป็นตัววนซ้ำแบบไปข้างหน้าเท่านั้น วัตถุจะ และจัดเตรียมวิธีการที่สามารถเรียกเพื่อจัดการกับสถานะของตัวสร้าง รวมทั้งส่งค่าไปและคืนค่าจากมัน

Generator เป็น interator

ในตัวอย่างต่อไปนี้ ฟังก์ชันตัวสร้างให้บรรทัดในไฟล์ในอ็อบเจ็กต์ตัวสร้างซึ่งสามารถข้ามผ่านได้โดยใช้ oreach loop วิธีการวนซ้ำ เช่น ปัจจุบัน () และ ถัดไป () สามารถเรียกใช้ได้เช่นกัน อย่างไรก็ตาม เนื่องจากตัวสร้างเป็นตัววนซ้ำแบบส่งต่อเท่านั้น จึงเรียก กรอกลับ () วิธีการส่งข้อยกเว้น

ตัวอย่าง

<?php
function filegenerator($name) {
   $fileHandle = fopen($name, 'r');
   while ($line = fgets($fileHandle)) {
      yield $line;
   }
   fclose($fileHandle);
}
$name="test.txt";
$file=filegenerator($name);
foreach ($file as $line)
echo $line;
$file->rewind();
echo $file->current();
$file->next();
echo $file->current();
?>

ผลลัพธ์

หลังจากข้ามบรรทัดไฟล์แล้ว ข้อผิดพลาดร้ายแรงที่แสดงด้านล่างจะปรากฏขึ้น

PHP User Defined Functions
PHP Function Arguments
PHP Variable Functions
PHP Internal (Built-in) Functions
PHP Anonymous functions
PHP Arrow Functions
PHP Fatal error: Uncaught Exception: Cannot rewind a generator that was already run