Selamat datang di bagian ke-71 dari seri tutorial pemrograman PHP kami! Di bagian ini, kita akan mempelajari tentang PHP Generators. Generators memungkinkan kita untuk melakukan lazy evaluation, yang sangat berguna untuk memproses data dalam jumlah besar tanpa menghabiskan memori secara berlebihan. Bagian ini mengasumsikan Anda sudah memahami dasar-dasar PHP, termasuk fungsi dan iterasi. Sebagai kelanjutan dari part sebelumnya tentang PHP Streams, kita akan melihat bagaimana Generators dapat melengkapi Streams untuk pemrosesan data yang lebih efisien.
Bayangkan Anda memiliki sebuah file berukuran 1GB yang berisi daftar nama. Jika Anda membaca seluruh file ke dalam array sekaligus, Anda akan kehabisan memori. Generators menyelesaikan masalah ini dengan menghasilkan nilai satu per satu, hanya ketika dibutuhkan. Ini seperti keran air: air (data) hanya keluar saat Anda membukanya (meminta nilai).
Generator adalah fungsi khusus di PHP yang menghasilkan nilai menggunakan kata kunci yield. Alih-alih return, yield menangguhkan eksekusi fungsi dan mengembalikan nilai. Saat generator dipanggil lagi, eksekusi dilanjutkan dari titik terakhir.
Penjelasan:
function numberGenerator(int $start, int $end): Generator: Mendefinisikan fungsi generator yang menerima dua argumen integer, start dan end, dan mengembalikan sebuah Generator.for ($i = $start; $i <= $end; $i++): Melakukan iterasi dari nilai start hingga end.yield $i: Menghasilkan nilai $i. Ini menangguhkan fungsi dan mengembalikan nilai saat ini. Saat iterasi berikutnya, eksekusi dilanjutkan dari sini.$numbers = numberGenerator(1, 5): Membuat instance dari generator. Perhatikan bahwa kode di dalam generator *tidak* dieksekusi saat ini.foreach ($numbers as $number): Melakukan iterasi melalui nilai yang dihasilkan oleh generator. Setiap iterasi memicu eksekusi generator sampai mencapai yield berikutnya.
'John';
yield 'age' => 30;
yield 'city' => 'New York';
}
$person = keyValueGenerator();
foreach ($person as $key => $value) {
echo "$key: $value\n";
}
// Output:
// name: John
// age: 30
// city: New York
?>
Penjelasan:
yield 'name' => 'John': Menghasilkan pasangan kunci 'name' dengan nilai 'John'.
Penjelasan:
fileLineGenerator(string $filename): Generator: Fungsi generator untuk membaca file baris per baris.fopen($filename, 'r'): Membuka file dalam mode baca.fgets($file): Membaca satu baris dari file.yield trim($line): Menghasilkan baris yang telah dibersihkan (whitespace dihilangkan).fclose($file): Menutup file setelah selesai.Generator.Buatlah sebuah generator yang menghasilkan bilangan Fibonacci hingga batas tertentu. Gunakan generator ini untuk mencetak 20 bilangan Fibonacci pertama.