Tutorial OOP Lanjutan

Enumeration

Materi ini memiliki 1 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.

Pada video ini, kita akan membicarakan mengenai Enumeration, yang merupakan fitur baru di PHP versi 8,1. Jadi bagi teman-teman yang ingin menggunakan Enumeration, pastikan dahulu bahwa versi PHP yang sedang digunakan minimal 8,1.

Tipe data enumeration ini biasanya digunakan untuk data yang jumlah nilainya terbatas. Contoh yang paling umum adalah gender atau jenis kelamin, dimana nilai datanya hanya Pria atau Wanita. Sebelum ada fitur enumeration, biasanya programmer menggunakan konstanta sebagai solusi dari masalah seperti ini. Namun sekarang lebih disarankan menggunakan tipe data enumeration.

Berikut adalah cara menggunakan enumeration. Pertama kita tulis dahulu kata kunci enum, diikuti oleh nama Enumeration-nya, misalkan disini Gender. Lalu kita buka kurung kurawal. Di dalamnya kita gunakan kata kunci case untuk menyebutkan nilai-nilai yang didukung oleh enumeration. Sebagai contoh disini ada 2 buah nilai yaitu Male dan Female.

Setelah itu kita bisa menggunakan tipe data Gender untuk menyimpan nilai ke dalam property, ataupun menggunakannya sebagai parameter. Kalau kita ingin tau apa saja nilai yang bisa disimpan di dalam Gender, kita bisa memanggil static method cases.

Kita coba praktek. Kita buat file baru enum.php. Kemudian di dalamnya kita buat dahulu tipe data enum dengan nama Gender. Kemudian case penggunaannya ada 2, yaitu Male dan Female.

Kita buat function sayHello dengan parameter berupa tipe data Gender, namanya $gender. Kemudian di dalamnya kita buat percabangan, jika gender Male maka kita echo “Hello Mr\n”. Selain itu jika Female maka kita echo “Hello Mrs\n”.

Kita coba panggil function sayHello menggunakan argument Male. Untuk mengakses nilai Male, pertama kita harus sebutkan dahulu nama enum-nya yaitu Gender diikuti oleh tanda titik dua sebanyak dua kali, baru kita tuliskan nilainya yaitu Male.

Kita coba jalankan. Dan kita mendapatkan hasil Hello Mr.

Kalau misalkan kita ingin tau, apa saja nilai yang bisa disimpan di dalam gender, kita bisa memanggil static method cases. Caranya adalah kita tuliskan dahulu nama enum-nya yaitu Gender, diikuti oleh dua buah titik dua dan nama method cases(). Kita var_dump hasilnya. Kita coba jalankan. Dan kita mendapatkan array yang isinya adalah Gender::Male dan Gender::Female.

Pada saat kita menggunakan PHP yang digabungkan ke sistem luar, seperti database atau web API, maka penggunaan tipe data enumeration akan menjadi kendala, karena cara penggunaan di PHP belum tentu sama dengan cara penggunaan di sistem luar. Oleh karena itu kita ingin agar enumeration bisa dikonversi menjadi tipe data primitif seperti integer atau string. Disini kita bisa menggunakan fitur Backed Enumeration.

Cara menggunakannya adalah, setelah kita sebutkan nama enumeration, kita tambahkan tanda titik dua dan tipe data primitif yang akan kita gunakan. Kita hanya bisa memilih salah satu dari int atau string. Pada contoh disini kita menggunakan int. Kemudian di setiap case, kita tambahkan tanda sama dengan dan nilai dalam integer.

Setelah kita menggunakan Backed Enumeration, maka secara otomatis kita memiliki property dan method yang bisa kita gunakan untuk melakukan konversi dari nilai enumeration ke backed, atau sebaliknya. Untuk mengubah nilai enumeration menjadi backed, kita bisa menggunakan property value. Sedangkan untuk mengubah nilai backed ke enumeration, kita bisa menggunakan method from dan tryFrom.

Apa perbedaan antara method from dengan tryFrom? Method from akan mengalami fatal error apabila kita memasukkan nilai argument yang salah. Sedangkan pada method tryFrom tidak mengalami fatal error, melainkan mengembalikan nilai null.

Agar lebih jelas kita coba praktek. Misalkan pada Gender kita tambahkan titik dua dan int. Artinya semua nilai dalam enumeration akan kita representasikan dalam nilai bilangan bulat. Pada saat ini kalau kita eksekusi maka kita mengalami fatal error. Kalau kita menggunakan fitur Backed Enumeration, maka semua case harus diberi nilai, dalam kasus ini nilai yang setara bilangan bulat. Jadi pada case Male kita tambahkan = 1. Dan pada case Female kita tambahkan = 2. Sekarang sudah tidak error.

Berhubung kita menggunakan fitur Backed Enumeration, maka kita memiliki method dan property yang bisa kita gunakan untuk melakukan konversi antara nilai enumeration dan nilai backed. Sebagai contoh, pada parameter fungsi sayHello terdapat parameter $gender. Kalau kita coba var_dump. Disini kita mendapatkan nilai berupa enum yaitu Gender::Male.

Kita bisa mengubah nilai enum ini menjadi nilai backed-nya. Dengan cara memanggil property value. Jadi dari variable $gender ini kita tambahkan tanda panah dan nama property value. Maka nilainya dikonversi menjadi integer 1. Kalau misalkan kita hendak menyimpan nilai Gender ke dalam database, lebih baik kita gunakan backed enumeration ya. Jadinya nilai Male kita simpan sebagai angka 1.

Kita hapus dahulu property value. Selanjutnya kita coba untuk melakukan konversi kebalikannya, misalkan dari nilai backed menjadi nilai enum. Cara ini berguna pada saat kita mengambil kembali nilai gender dari database. Misalkan kita mendapatkan nilai angka 1. Bagaimana cara mengubahnya menjadi gender Male?

Disini kita bisa menggunakan method from dan tryFrom. Kita coba ya. Misalkan pada saat kita memanggil fungsi sayHello. Namun pada argument-nya, kita menggunakan nilai integer 1. Jadi kita mesti melakukan konversi agar 1 berubah menjadi Gender::Male. Disini kita bisa menggunakan function from. Caranya setelah kata Gender dan dua buah titik dua, kita panggil method from dengan argument angka 1.

Kita jalankan. Kita bisa melihat bahwa nilai parameter $gender berubah menjadi Gender::Male. Kalau kita ganti ke angka 2, maka berubah menjadi Gender::Female. Ingat bahwa kita hanya bisa mengisi angka 1 dan 2 untuk Gender. Bagaimana kalau ternyata kita menggunakan angka lain? Misalnya 3. Maka kita mendapatkan fatal error.

Apabila kita tidak ingin mendapatkan fatal error, maka kita bisa menggunakan method tryFrom. Kita coba ya. Method tryFrom tidak menghasilkan fatal error, namun nilai $gender menjadi null. Disini kita bisa menggunakan null coalescing operator untuk memberikan nilai default. Kita gunakan dua buah tanda tanya diikuti oleh nilai default misalkan Gender::Male. Jadi apabila nilai argument tryFrom salah, maka $gender menggunakan nilai default Male.

Kita lanjutkan lagi pembahasan mengenai Enumeration. Disini kita bisa melihat beberapa point dimana Enumeration mirip dengan Class. Jadi kita bisa menambahkan method, baik yang biasa maupun yang static. Kemudian kita juga bisa menambahkan konstanta. Kita bahkan bisa mengimplementasikan interface dan bisa menggunakan trait pada Enumeration. Dan cara menggunakannya mirip dengan class.

Namun enumeration juga memiliki kelemahan ya. Kalau kita bandingkan dengan class, enumeration tidak bisa menggunakan constructor dan destructor, tidak bisa melakukan inheritance. Tidak bisa memiliki property. Dan tidak bisa melakukan cloning. Dan poin terakhirnya adalah enumeration harus kita deklarasikan terlebih dahulu, sebelum digunakan.

Kita coba praktek. Di kode sekarang function sayHello berada di luar enumeration ya. Kita bisa menambahkan method seperti ini langsung di dalam enum.

Caranya mirip dengan kelas. Di dalam blok kodenya, kita tambahkan function sayHello. Disini kita tidak perlu mengirimkan parameter $gender karena kita sedang berada di dalam enumnya. Misalkan method kita mengembalikan tipe data string.

Untuk mengakses nilai enum, kita bisa menggunakan kata kunci $this. Jadi kita tambahkan percabangan jika $this == Gender::Male return “Hello Mr\n”. Kemudian jika $this == Gender::Female return “Hello Mrs\n”.

Kita komentari pemanggilan function sayHello. Sekarang kita memanggil method ya. Kita echo Gender::Male->sayHello(). Maka kita mendapatkan hasil “Hello Mr”.

Selanjutnya kita akan mencoba untuk membuat static method. Kita sudah tau bahwa enumeration sudah memiliki method from yang bisa kita gunakan untuk memasukkan angka dengan nilai 1 dan 2. Kita akan membuat method yang mirip dengan from, namun untuk memilih gender berdasarkan parameter string.

Kita tambahkan deklarasinya static function fromString. Dengan satu buah argument string $s. Dan mengembalikan tipe data Gender. Di dalamnya kita return match($s). Kita gunakan match expression ya. Kalau nilainya ‘Mr’, maka kita kembalikan Gender::Male. Kalau nilainya ‘Mrs’ maka kita kembalikan Gender::Female. Sedangkan default-nya kita kembalikan Gender::Male.

Kita komentari pemanggilan method sayHello. Kita coba panggil static method fromString. Untuk memanggil static method, kita tinggal sebutkan nama Enumeration-nya saja. Diikuti oleh dua buah tanda titik dua dan langsung nama static method fromString. Misalkan argument-nya ‘Mr’. Kita var_dump dahulu hasilnya. Maka kita mendapatkan hasil Gender::Male.

Kalau argument kita ganti menjadi Mrs, maka kita mendapatkan hasil Gender::Female. Selain itu kalau nilai argument salah, maka kita tetap mendapatkan Gender::Male.

2 Jam 41 Menit

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.