Khái niệm generator không mới trong PHP 7, đã có từ phiên bản trước. Với generator, triển khai dễ dàng mà không tốn overhead của class implements iterator interface. Generator giúp viết code foreach không cần mảng trong bộ nhớ. Cũng giúp loại bỏ lỗi "exceed memory limit".
Với generator delegation trong PHP 7, có thể uỷ quyền cho generator khác tự động. Cũng cho phép mảng và đối tượng triển khai interface Traversable.
Ví dụ 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>
Kết quả
zero one two six seven eight zero one two nine three four five ten
Giải thích
- Viết code trong editor với HTML như ví dụ, phần body chèn code PHP 7 generator delegation.
- Khai báo ba hàm: "generator", "generator1", "generator2".
- Trong "generator": yield "zero", "one", "two".
- Trong "generator1": yield "three", "four", "five".
- Trong "generator2": yield "six", "seven", "eight", đọc generator và generator1 trong generator2.
- Cuối cùng lặp qua "generator" và "generator2" đến cuối, in giá trị yield.