Giới thiệu
Duyệt qua một tập hợp lớn dữ liệu bằng cách sử dụng cấu trúc lặp như foreach sẽ yêu cầu bộ nhớ lớn và thời gian xử lý đáng kể. Với máy phát điện có thể lặp lại một tập dữ liệu mà không có các chi phí này. Một chức năng máy phát điện tương tự như một chức năng bình thường. Tuy nhiên, thay vì câu lệnh trả về trong một hàm, trình tạo sử dụng năng suất từ khóa được thực thi lặp đi lặp lại để nó cung cấp các giá trị được lặp lại.
Từ khóa năng suất là trung tâm của cơ chế máy phát điện. Mặc dù việc sử dụng nó có vẻ tương tự như trả về, nhưng nó không ngừng thực thi chức năng. Nó cung cấp giá trị tiếp theo để lặp lại và tạm dừng thực thi chức năng.
mang lại giá trị
Vòng lặp for mang lại mỗi giá trị của biến lặp được sử dụng bên trong một hàm trình tạo
Ví dụ
<?php function squaregenerator(){ for ($i=1; $i<=5; $i++){ yield $i*$i; } } $gen=squaregenerator(); foreach ($gen as $val){ echo $val . " "; } ?>
Khi câu lệnh foreach cố gắng hiển thị $ val lần đầu tiên, trình tạo hình vuông sinh ra phần tử đầu tiên, giữ lại $ i và tạm dừng thực thi cho đến khi foreach thực hiện lần lặp tiếp theo. Đầu ra tương tự như một vòng lặp foreach thông thường
Đầu ra
1 4 9 16 25
phạm vi () của PHP hàm trả về danh sách các số nguyên từ $ start đến $ stop với khoảng cách giữa mỗi số là $ bước. Chương trình sau thực hiện phạm vi () làm trình tạo
Ví dụ
<?php function rangegenerator($start, $stop, $step){ for ($i=$start; $i<=$stop; $i+=$step){ yield $i; } } foreach (rangegenerator(2,10,2) as $val){ echo $val . " "; } ?>
Đầu ra
Đầu ra tương tự như phạm vi (2,20,2)
2 4 6 8 10
Một mảng kết hợp cũng có thể được triển khai dưới dạng trình tạo
Ví dụ
<?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"; ?>
Đầu ra
one=>1 two=>2 three=>3 four=>4