Tutorial OOP Lanjutan

Trait Overriding

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

Yang pertama adalah, ternyata kita bisa mengubah visibility dari method milik Trait, pada saat menggunakan Trait tersebut. Caranya adalah pada saat kita memanggil use Trait, kita tambahkan nama method dan kata kunci as, diikuti oleh kata kunci visibility seperti private, public dan protected. Maka visibility dari method berubah menjadi yang kita atur.

Agar lebih jelas kita coba praktek ya. Kita buka lagi source code dari video sebelumnya. Kita buka file User.php. Disini ada kelas User yang saat ini menggunakan DbLoggerTrait dan LoggerTrait ya. Kita hapus dahulu DbLoggerTrait. Jadi kita hanya menggunakan satu trait saja, yaitu LoggerTrait. Dan untuk sementara kita hapus dahulu semua kode di dalam blok use. Dan kita hapus juga pemanggilan method dbLog di dalam method setName.

Kita buka kembali file LoggerTrait.php. Kita lihat di dalam LoggerTrait terdapat satu buah method dengan nama log yang visibility-nya adalah public. Artinya method ini bisa dipanggil dari luar kelas.

Kita pindah ke main.php. Kita komentari method setName. Kita ganti ya, kita ingin mencoba untuk memanggil langsung method log dari luar kelas. Kita gunakan argument 'Mencoba method log'.

Kita simpan dan jalankan. Ternyata method berjalan dengan lancar ya. Karena visibility-nya bersifat public, maka method ini bisa dipanggil dari luar kelas.

Selanjutnya kita coba untuk mengganti visilibity menjadi private. Caranya? Kita buka file User.php. Di dalam blok use, kita tambahkan pertama nama method-nya dahulu yaitu log diiikuti oleh kata kunci as dan nama visibility private titik koma.

Kita simpan dan coba jalankan. Dan sekarang kita sudah mendapatkan fatal error ya. Karena visibility dari method log sudah diubah menjadi private, sehingga saat ini sudah tidak bisa dipanggil dari luar kelas. Agar tidak error, kita ubah lagi visibility dari private menjadi public.

Kita lanjutkan ke materi kedua yang akan kita bahas dalam video ini, yaitu Presedence. Apabila Trait, Parent Class dan Child Class mengandung method dengan nama yang sama, maka PHP secara otomatis memilih salah satu method berdasarkan Precedence. Jadi diantara Trait, Parent Class dan Child Class ini diberikan presedence atau tingkatan, dimana ada yang dianggap kurang penting dan ada yang dianggap lebih penting.

Apabila Parent Class mengandung method dengan nama yang sama dengan Trait, maka PHP menggunakan method milik Trait dan mengabaikan method milik Parent Class. Hal ini disebabkan karena Parent Class dianggap kurang penting dan Trait dianggap lebih penting.

Kemudian apabila Child Class mengandung method dengan nama yang sama dengan Trait, maka PHP menggunakan method milik Child Class dan mengabaikan method milih Trait. Hal ini disebabkan karena Child Class dianggap lebih penting dari Trait.

Jadi urutan Precedencenya dari yang dianggap kurang penting hingga yang dianggap lebih penting adalah Parent Class, Trait dan Child Class.

Kita coba praktek ya. Kita buat file baru pada folder class. Kita beri nama Person.php. Kita buka tag PHP. Lalu kita buat kelas dengan nama Person. Di dalamnya kita buat method log dengan parameter string $message dan hasilnya void. Isinya kita echo "[Person]: $message\n".

Selanjutnya kita buka lagi file User.php. Pertama kita tambahkan dahulu require_once menuju class/Person.php. Kemudian pada kelas User kita tambahkan extends Person. Jadi kelas Person ini kita jadikan kelas induk dari User.

Kita simpan dan jalankan. Dan kita bisa lihat hasilnya method log yang dijalankan adalah milik Trait. Karena secara presedence, Trait dianggal lebih penting dari Parent Class. Jadi PHP secara otomatis memilih method log milik LoggerTrait dan mengabaikan method log milik kelas Person.

Apabila kita ingin menjalankan method log milik Parent, maka kode use Trait harus kita komentari. Dan sekarang kelihatan kalau yang dijalankan adalah log milik Parent.

Kita gunakan kembali kode use. Dan selanjutnya kita tambahkan method log di dalam kelas User. Kita copy paste saja dari Person ya. Namun kata Person-nya kita ubah menjadi User.

Kita simpan dan jalankan. Dan sekarang kita lihat hasilnya yang dijalankan adalah method log milik User ya. Secara presedence, Child Class dianggap lebih penting dari Trait, jadi PHP secara otomatis memilih method log milik kelas User dan mengabaikan method log milik LoggerTrait.

Kita lanjutkan ke materi terakhir dalam video ini yaitu mengenai Abstract Method. Kita juga bisa menambahkan abstract method ke dalam trait. Apabila trait mengandung abstract method, maka class yang menggunakan trait tersebut wajib menuliskan kode implementasi dari abstract method-nya.

Kita coba praktek ya. Kita buka file LoggerTrait.php. Pada LoggerTrait kita tambahkan abstract public function error(string $message): void. Berhubung sifatnya abstract, maka kita tidak perlu menuliskan kode implementasi ya.

Namun pada saat kita jalankan, kita mendapatkan fatal error. Hal ini disebabkan karena kelas User menggunakan LoggerTrait. Dan kelas User diwajibkan untuk menuliskan kode implementasi untuk function error.

Untuk memperbaikinya, kita buka kembali file User.php. Kita harus menuliskan kode implementasi untuk function error. Sebagai contoh disini, kita copy paste saja dari function log ya. Kita ganti nama functionnya menjadi error dan tulis pada echo menjadi error.

Kalau kita jalankan, sekarang sudah tidak error. Jadi kita bisa menambahkan abstract method ke dalam Trait, namun semua class yang menggunakan Trait tersebut diwajibkan untuk menuliskan kode implementasi dari abstract method-nya.

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.