Selamat datang di Part 80 dari seri tutorial pemrograman PHP! Pada bagian ini, kita akan menjelajahi konsep PHP Generators. Generator adalah cara yang sangat efisien untuk memproses data dalam jumlah besar tanpa membebani memori server Anda. Jika Anda pernah mengalami masalah dengan memori saat memproses file besar atau kumpulan data, generator bisa menjadi solusi yang Anda cari. Sebagai prasyarat, pastikan Anda memahami dasar-dasar fungsi dan iterasi di PHP.
Bayangkan Anda memiliki file log sebesar 10 GB. Jika Anda membaca seluruh file ke dalam array, itu akan memakan banyak memori. Generator, di sisi lain, menghasilkan nilai satu per satu sesuai permintaan. Analoginya adalah keran air: air (data) hanya keluar (diproses) ketika Anda membukanya (meminta data). Tidak seperti menampung air di wadah besar (array), Anda tidak perlu menyediakan wadah besar di awal.
Fungsi biasa mengembalikan satu nilai setelah dieksekusi. Generator menggunakan kata kunci yield untuk mengembalikan banyak nilai secara bertahap. Setiap kali yield dipanggil, fungsi 'pause' dan mengembalikan nilai. Ketika dipanggil lagi, ia melanjutkan dari titik terakhir tanpa memulai dari awal.
Contoh ini menunjukkan cara membaca file CSV besar baris demi baris menggunakan generator. Ini jauh lebih efisien daripada memuat seluruh file ke dalam array.
getMessage();
}
?>
Penjelasan:
readCSV adalah generator yang menerima nama file sebagai argumen.fopen membuka file untuk dibaca.fgetcsv membaca satu baris dari file CSV.yield $row mengembalikan baris saat ini dan 'menjeda' fungsi.foreach memanggil generator berulang kali, memproses setiap baris satu per satu.try...catch menangani kemungkinan kesalahan saat membuka file.Generator juga berguna untuk menghasilkan deret tak terbatas seperti deret Fibonacci.
current() . ' ';
$fibonacci->next();
}
?>
Penjelasan:
fibonacci adalah generator yang menghasilkan deret Fibonacci tak terbatas.yield $current mengembalikan angka Fibonacci saat ini.while (true) memastikan generator terus berjalan tanpa henti.$fibonacci->current() dan $fibonacci->next() untuk mengontrol iterasi.
'value1';
yield 'key2' => 'value2';
yield 'key3' => 'value3';
}
foreach (keyedGenerator() as $key => $value) {
echo "Key: $key, Value: $value\n";
}
?>
Penjelasan:
yield: Generator hanya berfungsi jika Anda menggunakan kata kunci yield.fclose untuk menghindari kebocoran sumber daya.Buat generator yang menghasilkan semua bilangan prima antara 1 dan 1000. Gunakan generator ini untuk mencetak bilangan prima tersebut.
Setelah kita membahas strategi caching tingkat lanjut untuk API berkinerja tinggi di part sebelumnya ('Advanced Caching Strategies in PHP for High-Performance APIs'), pemahaman tentang penggunaan PHP Generators akan sangat berguna dalam skenario di mana data besar perlu diproses secara efisien sebelum disimpan dalam cache atau dikirim sebagai respons API. Generators memungkinkan Anda menghindari memuat seluruh dataset ke dalam memori, menjadikannya alat yang sangat berharga dalam kombinasi dengan teknik caching.