Tutorial OOP Lanjutan
Iterator dan Yield
Materi ini memiliki 1 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.
Sebelumnya pada saat belajar array, kita sudah pernah belajar bahwa untuk melakukan perulangan terhadap seluruh data di dalam array, kita bisa menggunakan kata kunci foreach. Perulangan menggunakan foreach ini bisa dilakukan karena array secara otomatis memiliki Iterator, sehingga kita bisa melakukan iterasi terhadap data yang disimpan di dalam array.
Pertanyaannya adalah, apakah kita bisa menggunakan foreach pada object? Ternyata, kita bisa menggunakan foreach pada object. Secara default, data yang muncul di dalam foreach adalah semua property yang bersifat public. Sedangkan property yang bersifat private atau protected tidak muncul di dalam foreach.
Kalau kita ingin mengubah hal ini, maka kita bisa melakukan iterasi manual. Bagaimana caranya? Pertama, pada deklarasi kelas, kita mesti menambahkan implements IteratorAggregate. Setelah itu di dalam kelas kita harus menuliskan kode implementasi untuk method getIterator yang mengembalikan tipe data Iterator.
Di dalam method getIterator, kita tinggal sebutkan data-data yang akan diiterasikan dengan menggunakan kata kunci yield.
Berikut adalah contoh kodenya. Untuk mengembalikan data dalam bentuk pasangan key value, maka setelah yield kita tuliskan dahulu key, diikuti oleh tanda panah dan nilainya. Namun kalau kita ingin mengembalikan data yang hanya berupa nilai, maka kita bisa menggunakan kata kunci yield diikuti langsung oleh nilainya.
Kita coba praktek. Pertama kita buat dahulu file baru dengan nama array.php. Di dalamnya kita buat variable $student yang menampung associative array, yang isinya ‘name’ => ‘Budi’, ‘age’ => 18, ‘classroom’ = ‘2A’.
Setelah itu kita gunakan variable $student di dalam foreach, untuk menampilkan isi datanya:
foreach($student as $key => $value) echo "$key : $value\n";
Kalau kita jalankan, maka kita bisa melihat data variable $student dalam bentuk pasangan key value.
Kita sudah melihat bahwa kita bisa menggunakan foreach untuk tipe data array, bagaimana dengan tipe data object? Kita coba ya.
Kita buat file baru di dalam folder class, kita beri nama Student.php. Di dalamnya kita buat kelas Student. Dengan constructor yang menggunakan parameter public string $name, public int $age dan private string $classroom. Perhatikan bahwa untuk property $classroom, dengan sengaja kita ubah menjadi private.
Selanjutnya kita buat file baru dengan nama object.php untuk mencoba menggunakan foreach pada object. Pertama kita require_once dahulu file ‘class/Student.php’. Lalu kita buat variable $student untuk melakukan instantiate Student dengan argument ‘Budi’, 18, ‘2A’.
Setelah itu kita coba gunakan dalam foreach untuk menampilkan isi datanya:
foreach($student as $key => $value) echo "$key : $value\n";
Kalau kita jalankan. Maka kita bisa melihat isi data dari object $student, dalam bentuk pasangan key value. Perhatikan bahwa nama property menjadi key. Namun jumlah property yang tampil hanya 2, yaitu name dan age. Sedangkan property classroom yang bersifat private tidak muncul di dalam foreach. Secara default, Iterator pada object mengeluarkan semua property yang bersifat public, dan tidak mengeluarkan property yang bersifat private atau protected. Apabila kita ingin mengubah hal ini, maka kita mesti membuat Iterator sendiri.
Bagaimana caranya? Kita buka kembali file Student.php. Pada deklarasi kelas Student, kita tambahkan implements IteratorAggregate. Kalau kita jalankan kembali object.php, maka kita mendapatkan fatal error. Hal ini disebabkan karena interface IteratorAggregate memiliki method getIterator. Jadi kita mesti menuliskan kode implementasi dari method getIterator.
Kita tambahkan method baru getIterator tanpa parameter dengan hasil berupa Iterator. Di dalamnya tinggal kita tambahkan saja kata kunci yield diikuti oleh $key, tanda panah dan $value. Pertama kita yield dahulu ‘name’ => $this->name. Kemudian kita yield ‘age’ => $this->age. Dan yang terakhir kita yield ‘classroom’ => $this->classroom.
Kita jalankan. Maka kita bisa mendapatkan ketiga property di dalam foreach. Berbeda dari Iterator bawaan kelas yang hanya menampilkan property yang bersifat public. Dengan membuat Iterator manual, kita bisa mengatur data apa saja yang masuk ke dalam foreach. Kita bisa memunculkan property yang bersifat private ataupun protected. Kita juga bisa menghilangkan property yang bersifat public. Sebagai contoh, kalau kita tidak ingin memunculkan property ‘age’, kita tinggal hilangkan kode yield ‘age’.
Kita juga bisa mengatur urutan property, sesuai dengan urutan kode yield kita. Kalau misalkan kita mau property ‘classroom’ muncul duluan, maka kita bisa memindahkan kode yield-nya ke paling atas. Kita juga bisa mengubah key-nya menjadi berbeda dari nama property-nya. Misalkan key ‘classroom’ menjadi ‘class’ saja. Atau kita bisa memberikan nilai yang hasil perhitungan, seperti kata ‘Kelas ‘ ditambah $this->classroom.
Selain itu, kita juga bisa menggunakan yield untuk mengirimkan hanya nilainya saja. Misalkan kita komentari dahulu semua yield yang berupa key-value. Kita tambahkan yield baru untuk $this->name, $this->age dan $this->classroom. Kalau dijalankan, maka PHP secara otomatis memberikan key yang berupa nomor index berurutan dimulai dari 0.
Dengan menggunakan fasilitas tanya jawab, maka Anda bisa bertanya dan akan dijawab langsung oleh instruktur kursus.
Anda belum terdaftar pada kursus ini sehingga tidak bisa mengajukan pertanyaan.