Cara untuk memastikan agar child class memiliki method tertentu yang isinya tidak harus sama antara child class satu dan yang lainnya adalah menggunakan abstract class dan interface. Disini kita akan membahas abstract class.
Abstract class dideklarasikan dengan keyword abstract. Abstract class memiliki setidaknya satu abstract method. Abstract method adalah method yang hanya memiliki nama dan argumen saja : abstract protected function namaMethod().
Abstract class tidak akan dibuat instancenya, hanya digunakan untuk keperluan pembuatan child class yang akan diturunkan darinya.
Contohnya kita akan melihat bangun datar. Bangun datar bisa berupa bujursangkar, segitiga, persegi panjang, yang cara perhitungan luasnya berbeda beda.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?php abstract class BangunDatar{ abstract protected function hitungLuas(); } class Persegi extends BangunDatar{ protected $sisi = 4; public function hitungLuas(){ return pow($this->sisi,2); } } class Segitiga extends BangunDatar{ protected $alas = 4; protected $tinggi = 3; public function hitungLuas(){ return (0.5 * $this->alas * $this->tinggi); } } class Lingkaran extends BangunDatar{ protected $jarijari = 7; public function hitungLuas(){ return (3.14 * pow($this->jarijari,2)); } } $persegi = new Persegi(); echo 'Luas Persegi = '. $persegi->hitungLuas() . "<br>"; $segitiga = new Segitiga(); echo 'Luas Segitiga = '.$segitiga->hitungLuas() . "<br>"; $lingkaran = new Lingkaran(); echo 'Luas Lingkaran = '.$lingkaran->hitungLuas() . "<br>"; ?> |
Di kode diatas terdapat abstract class BangunDatar{} yang memiliki abstract method hitungLuas(). Sehingga di setiap child dari BangunDatar{} harus mempunyai method hitungLuas().
Menambah Property dan Method pada Abstract Class
Abstract Class juga bisa memiliki property dan method. Hanya yang membedakan dengan Class biasa adalah dia tidak akan diinstansiasi menjadi object.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?php abstract class Mobil{ protected $volTangki; public function isiBensin($vol){ $this->volTangki = $vol; } abstract protected function jarakTempuhMaksimum(); } class Toyota extends Mobil{ protected $perLiter = 10; public function jarakTempuhMaksimum(){ $jarakMaks = $this->perLiter * $this->volTangki; echo 'Jarak tempuh maks Toyota '.$jarakMaks . " km <br>"; } } class Suzuki extends Mobil{ protected $perLiter = 20; public function jarakTempuhMaksimum(){ $jarakMaks = $this->perLiter * $this->volTangki; echo 'Jarak tempuh maks Suzuki '.$jarakMaks . " km <br>"; } } $toyota = new Toyota(); $toyota->isiBensin(10); $toyota->jarakTempuhMaksimum(); $suzuki = new Suzuki(); $suzuki->isiBensin(10); $suzuki->jarakTempuhMaksimum(); ?> |
Pada kode diatas terdapat method isiBensin() di abstract class, yang bisa digunakan oleh child classnya. Abstract method adalah jarakTempuhMaksimum(), sehingga di setiap child Class nya harus mempunyai method ini.