Selain encapsulation, prinsip OOP yang lain adalah Inheritance. Dengan prinsip ini, duplikasi penulisan kode program akan dapat diminimalisir. Ingatlah selalu prinsip pemrograman DRY – Don’t Repeat Yourself.
Dengan inheritance, kode yang ditulis di parent class bisa digunakan dan direuse oleh banyak child berkali-kali. Inheritance pada PHP menggunakan keyword extends.
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 |
<?php class Mobil { private $merk; public function setMerk($merk){ $this->merk = $merk; } public function getMerk(){ return $this->merk; } public function halo(){ return "Halo aku adalah mobil...".$this->merk; } } class Mobilsport extends Mobil{ } $ferrari = new Mobilsport(); $ferrari->setMerk('Ferrari'); echo $ferrari->halo(); ?> |
Mobil Sport adalah bagian dari Mobil. Karena itu, public function yang berada di Class Mobil{} bisa digunakan juga di Class MobilSport{}.
Menambahkan Property dan Method pada Child Class
Child class boleh menambahkan property dan method sendiri, namun property dan method pada child class ini tidak bisa diakses oleh parent class.
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 |
<?php class Mobil { private $merk; public function setMerk($merk){ $this->merk = $merk; } public function getMerk(){ return $this->merk; } public function halo(){ return "Halo aku adalah mobil...".$this->merk; } } class Mobilsport extends Mobil{ private $nos = 'Nitrous Oxyde System'; public function ngebut(){ return "Mengendarai ".$this->getMerk()." dengan ".$this->nos; } } $ferrari = new Mobilsport(); $ferrari->setMerk('Ferrari'); echo $ferrari->ngebut(); ?> |
Protected Access Modifier
Di tutorial sebelumnya tentang Encapsulation, kita sudah membahas Public dan Private Access Modifier. Terdapat satu buah access modifier lainnya, yaitu protected. Protected access modifier digunakan supaya child class bisa mengakses private property dari parent classnya.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php class Mobil{ protected $merk; public function setMerk($merk){ $this->merk = $merk; } } class Mobilsport extends Mobil{ public function halo(){ return "Halo saya ".$this->merk; } } $ferrari = new Mobilsport(); $ferrari->setMerk('Ferrari'); echo $ferrari->halo(); ?> |
Override Property dan Method
Override atau menggantikan property dan method yang dimiliki oleh parent pada child class bisa dilakukan dengan memberikan property dan method dengan nama yang sama pada Child Classnya. Proses ini sama seperti replace file.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php class Mobil{ public $merk='Toyota'; public function klakson(){ return "Tin tin.."; } } class Mobilsport extends Mobil{ public $merk = 'Ferrari'; public function klakson(){ return " Tetlooooot..."; } } $ferrari = new Mobilsport(); echo $ferrari->merk; echo $ferrari->klakson(); ?> |
Ketika di tampilkan di layar, kode diatas akan menampilkan Ferrari dan Tetlooot. Hal ini sesuai dengan prinsip overriding, karena Ferrari menggantikan Toyota yang berada di property $merk dari parent Class, begitu juga dengan method klakson.
Mencegah Method Overriding
Untuk mencegah method di override oleh child class, gunakan keyword final. Final berarti method tersebut tidak bisa diubah – ubah lagi. Untuk mencegah penggantian property, tidak digunakan final, tapi gunakan static. Kita akan bahas ini nanti.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php class Mobil{ final public function mesin(){ return 'Mobil bensin'; } } class MobilListrik extends Mobil{ public function mesin(){ return 'Mobil Elektrik'; } } $tesla = new MobilListrik(); echo $tesla->mesin(); ?> |
Mencegah Inheritance
Keyword final juga dapat digunakan untuk mencegah suatu Class diturunkan.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php final class Mobil{ public function mesin(){ return 'Mobil bensin'; } } class MobilListrik extends Mobil{ public function mesin(){ return 'Mobil Elektrik'; } } $tesla = new MobilListrik(); echo $tesla->mesin(); ?> |