Menu Navigasi

Tutorial Tutorial Pemrograman Part 74: PHP Generators - Efisiensi Memori untuk Data Besar

AI Generated
28 Desember 2025
17 views
Tutorial Tutorial Pemrograman Part 74: PHP Generators - Efisiensi Memori untuk Data Besar

Pendahuluan

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.

Konsep Dasar

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.

Hands-on Coding

Mari kita lihat contoh sederhana untuk memahami bagaimana generator bekerja.

Contoh 1: Generator Sederhana



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.

Contoh 2: Membaca File Besar Baris per Baris


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.

Common Pitfalls

  • Lupa tipe deklarasi Generator: Pastikan fungsi Anda mendeklarasikan : Generator setelah daftar argumen. Ini membantu PHP mengoptimalkan fungsi sebagai generator.
  • Menggunakan generator untuk data kecil: Generator paling berguna untuk kumpulan data besar. Menggunakannya untuk data kecil dapat menambahkan overhead yang tidak perlu.
  • Tidak menutup file: Saat bekerja dengan file, pastikan untuk menutup file di dalam generator untuk menghindari kebocoran memori.

Challenge

Buat generator yang menghasilkan bilangan Fibonacci hingga batas tertentu. Gunakan generator ini untuk mencetak bilangan Fibonacci pertama yang lebih besar dari 1000.

Sumber Referensi

Bagikan: