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

คลาสตัวสร้าง PHP


แนะนำตัว

สำรวจชุดข้อมูลขนาดใหญ่โดยใช้โครงสร้างการวนซ้ำ เช่น foreach จะต้องใช้หน่วยความจำขนาดใหญ่และใช้เวลาในการประมวลผลมาก ด้วย เครื่องกำเนิดไฟฟ้า เป็นไปได้ที่จะวนซ้ำชุดข้อมูลโดยไม่มีค่าโสหุ้ยเหล่านี้ ฟังก์ชันเครื่องกำเนิดไฟฟ้าจะคล้ายกับฟังก์ชันปกติ อย่างไรก็ตาม แทนที่จะส่งคืนคำสั่งในฟังก์ชัน ตัวสร้างจะใช้ ผลตอบแทน คำหลักที่จะดำเนินการซ้ำ ๆ เพื่อให้มีค่าที่จะทำซ้ำ

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

ไวยากรณ์

Generator implements Iterator {
   /* Methods */
   public current ( void ) : mixed
   public getReturn ( void ) : mixed
   public key ( void ) : mixed
   public next ( void ) : void
   public rewind ( void ) : void
   public send ( mixed $value ) : mixed
   public throw ( Throwable $exception ) : mixed
   public valid ( void ) : bool
   public __wakeup ( void ) : void
}

วิธีการ

ตัวสร้างสาธารณะ::กระแส ( โมฆะ ) - ผสม — รับค่าผลตอบแทน

ตัวสร้างสาธารณะ::getReturn ( เป็นโมฆะ ) :ผสม — รับผลตอบแทนของเครื่องกำเนิดไฟฟ้า

ตัวสร้างสาธารณะ::คีย์ ( โมฆะ ) - ผสม — รับคีย์ของค่าที่ได้

ตัวสร้างสาธารณะ::ถัดไป ( โมฆะ ) − โมฆะ — ดำเนินการต่อไปของเครื่องกำเนิด ผลเช่นเดียวกับการเรียก Generator::send() โดยมี NULL เป็นอาร์กิวเมนต์

ตัวสร้างสาธารณะ::ย้อนกลับ ( โมฆะ ) − โมฆะ — กรอกลับตัววนซ้ำ หากการทำซ้ำได้เริ่มต้นขึ้นแล้ว การดำเนินการนี้จะทำให้เกิดข้อยกเว้น

ตัวสร้างสาธารณะ::ส่ง ( ค่า $ ผสม ) :ผสม — ส่งค่าที่กำหนดไปยังตัวสร้างซึ่งเป็นผลมาจากการแสดงออกของผลตอบแทนปัจจุบันและตัวสร้างต่อ

ตัวสร้างสาธารณะ::โยน ( ยกเว้น $ ที่โยนได้ ) - ผสม — โยนข้อยกเว้นเข้าไปในตัวสร้างและดำเนินการกับตัวสร้างต่อ

ตัวสร้างสาธารณะ::ถูกต้อง ( เป็นโมฆะ ) − บูล — ตรวจสอบว่าตัววนซ้ำถูกปิดหรือไม่

เครื่องมือสร้างสาธารณะ::__wakeup ( โมฆะ ) − โมฆะ — มีข้อยกเว้นเนื่องจากเครื่องกำเนิดไฟฟ้าไม่สามารถจัดลำดับได้

คลาสตัวสร้างใช้อินเทอร์เฟซ Iterator วัตถุตัวสร้างไม่สามารถสร้างอินสแตนซ์ใหม่ได้ ฟังก์ชันที่ผู้ใช้กำหนดซึ่งมีคีย์เวิร์ดให้ผลตอบแทนจะสร้างวัตถุของคลาสตัวสร้าง

ตัวอย่างเครื่องกำเนิดไฟฟ้า

เนื่องจากตัวสร้างใช้อินเทอร์เฟซ Iterator สำหรับแต่ละลูปจึงสามารถใช้เพื่อสำรวจค่าที่ได้

<?php
function squaregenerator(){
   for ($i=1; $i<=5; $i++){
      yield $i*$i;
   }
}
$gen=squaregenerator();
foreach ($gen as $val){
   echo $val . " ";
}
?>

ผลลัพธ์

โปรแกรมด้านบนแสดงผลลัพธ์ต่อไปนี้

1 4 9 16 25

ตัวอย่างต่อไปนี้ใช้เมธอด current() และ next() ของคลาสตัวสร้างเพื่อสำรวจค่าที่ได้ ตรวจสอบเงื่อนไขลูปด้วยเมธอด valid()

ตัวอย่าง

<?php
function squaregenerator(){
   for ($i=1; $i<=5; $i++){
      yield $i*$i;
   }
}
$gen=squaregenerator();
while ( $gen->valid() ){
   echo "key: " . $gen->key(). " value: ". $gen->current() . "\n";
   $gen->next();
}
?>

ผลลัพธ์

โปรแกรมด้านบนแสดงผลดังต่อไปนี้

key: 0 value: 1
key: 1 value: 4
key: 2 value: 9
key: 3 value: 16
key: 4 value: 25