แนวคิดของ generator ไม่ได้ใหม่ใน PHP 7 เพราะมีอยู่ในเวอร์ชันก่อนหน้าแล้ว ด้วย generators การ implement จะง่ายขึ้นโดยไม่มี overhead ของการ implement คลาสที่ implements iterator interface ด้วยความช่วยเหลือของ generator เราสามารถเขียนโค้ด foreach ได้โดยไม่ต้องใช้อาร์เรย์ในหน่วยความจำ มันยังช่วยกำจัดข้อผิดพลาด “exceed memory limit errors”
ด้วยความช่วยเหลือของ generator delegation ใน PHP 7 เราสามารถ delegate ไปยัง generator อีกตัวได้โดยอัตโนมัติ มันยังอนุญาตให้อาร์เรย์และอ็อบเจกต์ที่ implement traversable interface ได้
ตัวอย่าง Generator Delegation ที่ 1
<html> <head> <title> PHP 7 : Tutorialpoint </title> </head> <body> <?php
function generator(){
yield "zero";
yield "one";
yield "two";
}
function generator1(){
yield "three";
yield "four";
yield "five";
}
function generator2(){
yield "six";
yield "seven";
yield "eight";
yield from generator();
yield "nine";
yield from generator1();
yield "ten";
}
foreach (generator() as $value){
echo $value, PHP_EOL;
}
foreach(generator2() as $value){
echo $value, PHP_EOL;
}
?> </body> </html>
ผลลัพธ์
ผลลัพธ์สำหรับโปรแกรม PHP generator delegation ด้านบนจะเป็น -
zero one two six seven eight zero one two nine three four five ten
คำอธิบาย
- เราสามารถเขียนโค้ดด้านบนใน editor และเขียน HTML code ที่จำเป็นตามตัวอย่างด้านบน และส่วน body ของ HTML inject โค้ด PHP 7 จริงสำหรับ generator return expression
- ที่สอง ฟังก์ชันสามฟังก์ชันถูกประกาศโดยใช้ "generator", "generator1", และ "generator2"
- เรากำหนด yield "zero", "one", และ "two" ในฟังก์ชัน generator
- ในฟังก์ชัน "generator1" yield "three", "four", และ "five" ถูกกำหนด
- ในฟังก์ชัน 'generator2' เรากำหนด yield "six", "seven", และ "eight" อ่าน generator และ generator1 ใน generator2
- สุดท้าย เรา iterate บนฟังก์ชัน "generator" และ "generator2" จนจบด้วยการ echo ค่าของ yields