แนะนำตัว
สำรวจชุดข้อมูลขนาดใหญ่โดยใช้โครงสร้างการวนซ้ำ เช่น foreach จะต้องใช้หน่วยความจำขนาดใหญ่และใช้เวลาในการประมวลผลมาก ด้วย เครื่องกำเนิดไฟฟ้า เป็นไปได้ที่จะวนซ้ำชุดข้อมูลโดยไม่มีค่าโสหุ้ยเหล่านี้ ฟังก์ชันเครื่องกำเนิดไฟฟ้าจะคล้ายกับฟังก์ชันปกติ อย่างไรก็ตาม แทนที่จะส่งคืนคำสั่งในฟังก์ชัน ตัวสร้างจะใช้ ผลตอบแทน คำหลักที่จะดำเนินการซ้ำ ๆ เพื่อให้มีค่าที่จะทำซ้ำ
คำหลักผลตอบแทนเป็นหัวใจของกลไกการกำเนิด แม้ว่าการใช้งานจะคล้ายกับการส่งคืน แต่ก็ไม่ได้หยุดการทำงานของฟังก์ชัน มีค่าถัดไปสำหรับการวนซ้ำและหยุดการทำงานของฟังก์ชันชั่วคราว
ค่าที่ให้ผล
A for loop ให้ค่าแต่ละค่าของตัวแปรการวนซ้ำภายในฟังก์ชันตัวสร้าง
ตัวอย่าง
<?php function squaregenerator(){ for ($i=1; $i<=5; $i++){ yield $i*$i; } } $gen=squaregenerator(); foreach ($gen as $val){ echo $val . " "; } ?>
เนื่องจากคำสั่ง foreach พยายามแสดง $val เป็นครั้งแรก ตัวสร้างสแควร์เจนเนอเรเตอร์จะให้องค์ประกอบแรก รักษา $i และหยุดการทำงานชั่วคราวจนกว่า foreach จะวนซ้ำในครั้งต่อไป ผลลัพธ์จะคล้ายกับ foreach loop ปกติ
ผลลัพธ์
1 4 9 16 25
range() . ของ PHP ฟังก์ชั่นส่งคืนรายการจำนวนเต็มตั้งแต่ $start ถึง $stop โดยมีช่วงเวลา $step ระหว่างตัวเลขแต่ละตัว โปรแกรมต่อไปนี้ใช้ range() เป็นตัวสร้าง
ตัวอย่าง
<?php function rangegenerator($start, $stop, $step){ for ($i=$start; $i<=$stop; $i+=$step){ yield $i; } } foreach (rangegenerator(2,10,2) as $val){ echo $val . " "; } ?>
ผลลัพธ์
เอาต์พุตคล้ายกับ range(2,20,2)
2 4 6 8 10
อาร์เรย์ที่เชื่อมโยงสามารถใช้เป็นตัวสร้างได้
ตัวอย่าง
<?php function arrgenerator($arr){ foreach ($arr as $key=>$val){ yield $key=>$val; } } $arr=array("one"=>1, "two"=>2, "three"=>3, "four"=>4); $gen=arrgenerator($arr); foreach ($gen as $key=>$val) echo $key . "=>" . $val . "\n"; ?>
ผลลัพธ์
one=>1 two=>2 three=>3 four=>4