Selamat datang di Part 74 seri tutorial pemrograman PHP! Di bagian ini, kita akan menyelami konsep PHP Generators. Generator adalah cara yang sangat efisien untuk menangani data besar, terutama saat berurusan dengan kumpulan data yang tidak muat di memori. Sebelum memulai, pastikan Anda sudah familiar dengan konsep dasar loop dan fungsi di PHP. Idealnya, Anda juga sudah memahami apa itu iterator. Karena kita sudah membahas PHP Reflection API di part sebelumnya, memahami generator akan semakin memperkaya pemahaman Anda tentang bagaimana PHP bekerja di balik layar.
Bayangkan Anda sedang membuat kue. Cara biasa adalah menyiapkan semua bahan, mencampurnya, lalu memanggang kue utuh. Generator seperti membuat kue *per slice* sesuai permintaan. Anda hanya membuat dan memanggang satu slice saat seseorang memintanya. Ini jauh lebih efisien jika Anda hanya perlu beberapa slice saja, atau jika Anda membuat kue yang sangat besar sehingga tidak muat dalam satu loyang sekaligus.
Secara teknis, generator adalah fungsi yang dapat dijeda dan dilanjutkan. Alih-alih mengembalikan satu nilai, generator menghasilkan (yield) serangkaian nilai. Setiap kali nilai dihasilkan, state fungsi dipertahankan sehingga dapat dilanjutkan pada panggilan berikutnya.
Mari kita lihat contoh sederhana untuk memahami bagaimana generator bekerja.
Penjelasan Kode:
function numberGenerator(int $start, int $end): Generator: Mendefinisikan fungsi generator yang menerima nilai awal dan akhir sebagai argumen dan mengembalikan objek Generator.for ($i = $start; $i <= $end; $i++): Loop sederhana dari nilai awal hingga akhir.yield $i: Kata kunci yield menghasilkan nilai saat ini dari loop. Ini *tidak* mengakhiri fungsi. Fungsi dijeda dan dapat dilanjutkan pada iterasi berikutnya.$generator = numberGenerator(1, 5): Membuat instance generator dengan nilai awal 1 dan nilai akhir 5.foreach ($generator as $number): Loop melalui nilai yang dihasilkan oleh generator. Setiap kali loop berjalan, generator melanjutkan eksekusi dari titik terakhir ia dijeda dan menghasilkan nilai berikutnya.
getMessage();
}
?>
Penjelasan Kode:
function readLargeFile(string $filename): Generator: Mendefinisikan fungsi generator yang membaca file besar baris per baris.$file = fopen($filename, 'r'): Membuka file dalam mode baca.while (!feof($file)): Loop selama belum mencapai akhir file.yield fgets($file): Membaca satu baris dari file dan menghasilkan baris tersebut.fclose($file): Menutup file setelah selesai.try...catch: Menangani pengecualian jika file tidak dapat dibuka.Contoh ini menunjukkan betapa efisiennya generator. Anda tidak perlu memuat seluruh file ke dalam memori sekaligus. Anda hanya memproses satu baris pada satu waktu.
: Generator setelah daftar argumen. Ini membantu PHP mengoptimalkan fungsi sebagai generator.Buat generator yang menghasilkan bilangan Fibonacci hingga batas tertentu. Gunakan generator ini untuk mencetak bilangan Fibonacci pertama yang lebih besar dari 1000.