Selamat datang di part 72 seri tutorial pemrograman PHP! Kali ini, kita akan membahas tentang PHP Generators. Generators memungkinkan kita untuk melakukan iterasi data tanpa membebani memori. Ini sangat berguna ketika kita berurusan dengan dataset besar atau proses yang menghasilkan banyak data. Sebagai prasyarat, sebaiknya Anda sudah familiar dengan konsep dasar loop dan iterasi dalam PHP, serta memahami bagaimana fungsi bekerja. Mengingat Part 71 membahas 'PHP Reflection API - Membongkar Struktur Kelas', generator dapat digunakan untuk mengiterasi properti atau metode kelas secara efisien.
Bayangkan Anda memiliki pabrik yang menghasilkan ribuan produk. Alih-alih menyimpan semua produk sekaligus di gudang (yang memakan banyak tempat), pabrik tersebut hanya memproduksi satu produk setiap kali ada permintaan. PHP Generators bekerja seperti itu. Mereka menghasilkan nilai satu per satu saat dibutuhkan, tidak menyimpan semua nilai dalam memori sekaligus. Secara teknis, generator adalah fungsi yang menggunakan keyword yield untuk menghasilkan nilai.
Mari kita buat contoh sederhana generator untuk menghasilkan deret bilangan Fibonacci:
<?php
function fibonacciGenerator(int $max):
Generator
{
$a = 0;
$b = 1;
for ($i = 0; $i < $max; $i++) {
yield $a;
$temp = $a + $b;
$a = $b;
$b = $temp;
}
}
// Menggunakan generator
foreach (fibonacciGenerator(10) as $number) {
echo $number . " ";
}
// Output: 0 1 1 2 3 5 8 13 21 34
?>
Penjelasan Kode:
function fibonacciGenerator(int $max): Generator: Mendefinisikan fungsi generator yang menerima jumlah maksimum deret Fibonacci yang akan dihasilkan. Tanda : Generator adalah return type hint yang memastikan fungsi ini mengembalikan object Generator.$a = 0; dan $b = 1;: Menginisialisasi dua variabel awal untuk deret Fibonacci.for ($i = 0; $i < $max; $i++): Loop untuk menghasilkan deret sebanyak $max kali.yield $a;: Keyword yield menghasilkan nilai $a dan 'menjeda' eksekusi fungsi. Ketika iterasi selanjutnya diminta, fungsi akan melanjutkan dari titik ini.$temp = $a + $b;, $a = $b;, dan $b = $temp;: Menghitung nilai Fibonacci berikutnya.foreach (fibonacciGenerator(10) as $number): Loop foreach digunakan untuk mengiterasi nilai-nilai yang dihasilkan oleh generator.Generator juga bisa menghasilkan nilai dengan key, seperti array asosiatif:
<?php
function keyValueGenerator(array $data):
Generator
{
foreach ($data as $key => $value) {
yield $key => $value;
}
}
$data = ['nama' => 'John', 'usia' => 30, 'kota' => 'New York'];
foreach (keyValueGenerator($data) as $key => $value) {
echo $key . ": " . $value . "<br>";
}
// Output:
// nama: John
// usia: 30
// kota: New York
?>
yield: Jika Anda tidak menggunakan yield dalam fungsi, itu bukan generator.Buatlah sebuah generator yang menghasilkan bilangan prima antara 1 dan 100.