Tutorial OOP Dasar Pada PHP
Konstanta dan Read Only
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 konstanta dan read only. Sebelumnya kita sudah pernah belajar mengenai konstanta ya. Konstanta ini mirip dengan variable, digunakan untuk menyimpan suatu nilai. Hanya saja bedanya adalah nilai pada konstanta tidak boleh diubah. Untuk membuat konstanta kita bisa menggunakan kata kunci const diikuti oleh nama konstantanya tanpa tanda dollar. Biasanya penamaan konstanta menggunakan upper snake case. Semua huruf menggunakan huruf besar. Apabila terdiri dari beberapa kata, maka dipisahkan menggunakan simbol underscore.
Setelah kita masuk ke materi OOP, ternyata kita juga bisa membuat konstanta di dalam kelas. Caranya tetap sama ya, hanya saja deklarasi konstantanya kita taruh di dalam kelas. Namun cara kerja konstanta pada OOP sedikit berbeda dari variable atau property ya. Kalau kita membuat property, maka nilai property disimpan di dalam objek. Sedangkan kalau kita membuat konstanta, maka nilai konstantanya disimpan di dalam kelas.
Mengapa ada perbedaan seperti ini? Ingat kembali bahwa setiap kelas bisa kita instantiate menjadi banyak objek. Property disimpan di dalam objek karena nilai property di setiap objek berbeda. Sedangkan nilai dari konstanta di setiap proyek tetap sama. Oleh karena itu konstanta cukup disimpan satu kali saja pada kelasnya.
Kalau kita hendak mengakses nilai konstanta di luar kelas, maka kita bisa menyebutkan nama kelas diikuti oleh dua buah simbol titik dua, kemudian nama konstantanya. Sedangkan kalau kita ingin mengakses nilai konstanta di dalam kelas, kita bisa mengganti nama kelas menjadi kata kunci self. Jadi disini kita sudah belajar 2 kata kunci yang berbeda ya. Kata kunci self adalah untuk mengakses kelas-nya. Sedangkan yang sebelumnya kita pelajari mengenai kata kunci this adalah untuk mengakses objeknya. Agar lebih jelas, kita coba praktek ya.
Kita buka lagi kode kita yang sebelumnya. Misalkan khusus proyek ini kita hendak membuat batasan bahwa script kita hanya bisa digunakan untuk sekolah SMU Negeri 01 saja. Jadi tidak bisa digunakan untuk sekolah lain ya. Untuk nama sekolahnya akan kita taruh di dalam kelas Student dan tidak boleh diubah.
Kita buka file Student.php dan kita tambahkan ke dalam deklarasi kelas Student. Untuk membuat konstanta, kita menggunakan kata kunci const, diikuti oleh nama konstantanya. Kita hendak membuat konstanta nama sekolah dalam bahasa inggris, jadi nama konstantanya adalah SCHOOL_NAME. Ingat bahwa untuk konstanta kita tidak menggunakan tanda dollar. Kemudian kita isi dengan nilai 'SMU Negeri 01'.
Kita buka lagi file main.php. Pada bagian paling bawah script, kita akan mengakses nilai konstanta dan mencetaknya di layar menggunakan echo. Untuk mengakses konstanta, pertama kita sebutkan dahulu nama kelasnya yaitu Student, diikuti oleh simbol :: dan nama konstanta SCHOOL_NAME. Kita tambahkan PHP_EOL. Kalau kita jalankan main.php, maka pada bagian paling akhir kita mendapatkan tulisan SMU Negeri 01.
Ingat lagi teori tadi ya. Setiap konstanta hanya disimpan sebanyak 1 kali di dalam kelasnya. Jadi pada saat ingin mengaksesnya kita menggunakan nama kelas. Berbeda dengan property, misalkan nama murid di simpan per objek. Karena kita bisa memiliki banyak objek. Contohnya disini kita memiliki objek pelajar 'Budi' dan 'Andi'. Kalau kita ingin mengakses property objek, maka kita menggunakan nama variable object-nya diikuti oleh simbol anak panah dan nama property-nya.
Nilai dari konstanta tidak boleh diubah ya. Jadi kalau kita coba mengubah Student::SCHOOL_NAME menjadi 'SMU Lain', maka kita mendapatkan error. Kita hapus lagi kodenya agar tidak error.
Kita cut kode untuk menampilkan nama sekolah. Lalu kita pindah ke file Student.php. Misalkan kita hendak mengakses nilai SCHOOL_NAME di dalam method showInformation. Kita paste kodenya ya.
Kalau kita jalankan kodenya tetap normal ya. Konstanta dapat diakses dengan benar. Namun kalau kode kita berada di dalam kelas, dan kita hendak mengakses kelas yang bersangkutan, kita tidak perlu menyebutkan nama kelasnya Student ya. Kita bisa ganti menjadi kata kunci self. Kalau kita coba, kode bisa berjalan dengan benar ya.
Jadi ingat lagi disini ada 2 kata kunci ya. Kata kunci self digunakan untuk mengakses kelasnya. Sedangkan kata kunci this digunakan untuk mengakses objeknya.
Kita lanjutkan ke materi yang masih mirip dengan konstanta, yaitu readonly property. Kita bisa menambahkan kata kunci readonly pada property, dan akan menyebabkan nilai pada property tersebut tidak boleh diubah lagi. Jadinya mirip dengan konstanta ya. Namun ada sedikit perbedaan. Kalau pada read only property, kita masih boleh mengubah nilai property sebanyak 1 kali. Atau dengan kata lain, kita boleh melakukan inisialisasi nilai awal dari readonly property.
Dari sisi penggunaan, readonly property lebih fleksibel dibandingkan dengan konstanta. Kalau tadinya pada saat kita membuat konstanta, kita harus langsung menentukan nilai yang disimpan oleh konstanta tersebut. Sedangkan pada readonly property, cara penggunaannya lebih dinamis. Kita bisa buat dahulu property-nya. Kemudian nilainya bisa kita isi misalkan dengan cara membaca file, mengambil data dari database, ataupun meminta masukkan dari user. Setelah itu barulah nilainya tidak bisa diubah lagi.
Agar lebih jelas kita coba praktek ya. Misalkan pada kelas Student ini kita memiliki 2 buah property yaitu name dan classroom. Kita ubah kedua property ini menjadi readonly. Kita ganti kata kunci var menjadi readonly. Kemudian perhatikan lagi bahwa readonly property hanya boleh diisi nilai satu kali ya. Jadi kalau kode kita seperti property classroom yang langsung diisi dengan nilai string 'Kosong', hal ini akan menyebabkan error karena nilai property classroom-nya tidak boleh diubah lagi pada constructor. Kita harus hilangkan dahulu nilai awalnya ya.
Kita coba jalankan dan kita mendapatkan pesan error ya. Perhatikan bahwa terjadi error pada main.php baris ke 10. Kalau kita buka lagi main.php dan lihat ke baris 10. Kode disini adalah kita sedang mengisi property $name dengan nilai 'Andi'. Mengapa terjadi error? Hal ini disebabkan karena pada saat kita membuat object Student, kita sudah mengisi nilai awal untuk $name dan $classroom. Perhatikan kode pada constructor-nya ya. Kalau kita tidak mengirimkan argument, maka kita mengisi kedua property dengan nilai string kosong. Nah, kita kembali lagi ke aturan readonly ya. Kalau kita sudah pernah mengisi property dengan suatu nilai, maka nilai tersebut sudah tidak boleh diubah.
Jadi cara kita untuk menggunakan object sudah tidak bisa seperti ini lagi. Pada saat kita membuat object Student, kita sudah harus mengisikan nama dan kelas-nya. Setelah itu tidak boleh diubah lagi. Kita ubah kodenya. Pada saat membuat object Student, kita harus langsung memasukkan nilai 'Andi' dan '1C'. Kemudian kita komentari kode pada baris 10 dan 11. Kita jalankan dan kode berjalan normal ya.
Namun kalau kita buka lagi komentar pada baris 10. Maka kita kembali mendapatkan pesan error yang tadi ya. Nilai yang sudah disimpan pada readonly property tidak boleh diubah lagi.
Kita lanjutkan lagi materinya ya. Kalau di contoh tadi kita memiliki kelas dengan 2 property, maka kita harus menuliskan kata kunci readonly sebanyak 2 kali. Nah, bayangkan kalau kelas kita memiliki puluhan property, artinya kita harus menuliskan kata kunci readonly sebanyak puluhan juga. Berkaitan dengan hal ini, maka PHP versi 8,2 membuat fitur baru yaitu readonly class. Dengan menggunakan fitur ini, kita bisa menambahkan kata kunci readonly satu kali saja pada deklarasi kelasnya. Dan secara otomatis semua property di dalam kelas menjadi readonly.
Kita coba praktek ya. Kita kembali ke kode yang sebelumnya error. Kita buka kembali file Student.php. Kalau kita ubah kata kunci readonly kembali ke var. Maka kode menjadi tidak error, karena nilai property-nya boleh diubah.
Namun perhatikan kalau sebelum kata kunci class kita tambahkan kata readonly. Artinya semua property di dalam kelas ini otomatis berubah menjadi readonly. Kalau kita jalankan kode kita, maka kita kembali mendapatkan pesan error bahwa property $name sudah tidak boleh diubah.
Jadi ini adalah fitur baru dari PHP versi 8,2 ya. Kalau kita menambahkan readonly pada kelasnya, maka seluruh property berubah menjadi readonly. Yang perlu diperhatikan disini adalah pastikan kita menggunakan PHP dengan versi 8,2 atau keatas ya. Karena versi sebelumnya tidak mengenal readonly class. Dan hal kedua yang perlu diperhatikan adalah kalau kita menggunakan readonly class, maka semua property harus berubah menjadi readonly. Kita tidak bisa menggunakan readonly hanya untuk sebagian property saja.
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.