Tutorial Belajar OOP PHP Part 9: Pengertian Inheritance (Pewarisan)

Setelah mempelajari Pengertian Constructor dan Destructor dalam OOP PHP, kali ini kita akan membahas Pengertian Inheritance atau Pewarisan dalam Pemrograman Objek, serta melihat contoh penggunaannya.


Pengertian Inheritance (Pewarisan) dalam OOP

Inheritance adalah konsep OOP dimana sebuah class dapat menurunkan property dan method yang dimilikinya kepada class lain. Konsep inheritance dipakai untuk memanfaatkan fitur code reuse, yakni menghindari terjadinya duplikasi kode program.

Dalam bahasa Indonesia, inheritance ini disebut juga sebagai pewarisan atau penurunan.

Konsep inheritance membuat sebuah struktur atau hierarchy class dalam kode program. Class yang akan diturunkan bisa disebut sebagai class induk (parent class), super class, atau base class.

Sedangkan class yang menerima penurunan bisa disebut sebagai class anak (child class), sub class, derived class atau heir class.

Tidak semua property dan method class induk akan diturunkan. Property dan method dengan hak akses private tidak akan diturunkan kepada class anak. Hanya property dan method dengan hak akses protected dan public saja yang bisa diakses dari class anak.


Cara Penggunaan Inheritance dalam PHP

Di dalam PHP, inheritance atau penurunan sebuah class kepada class lain menggunakan keyword extends, dengan penulisan dasar sebagai berikut:

class induk {
   //...isi class induk
}

class anak extends induk
{
   //... class anak bisa mengakses 
   //... property dan method class induk
}

Agar lebih mudah dipahami, kita akan langsung masuk ke dalam contoh program penggunaan inheritance PHP:

<?php
// buat class induk: komputer
class komputer {
 
   public $merk;
   public $processor;
   public $memory;
 
   public function beli_komputer() {
     return "Beli komputer baru";
   }
}
 
// turunkan class komputer ke laptop
class laptop extends komputer {
 
   public function lihat_spec() {
     return "merk: $this->merk, processor: $this->processor, 
     memory: $this->memory";
   }
}
 
// buat objek dari class laptop (instansiasi)
$laptop_baru = new laptop();
 
// isi property objek
$laptop_baru->merk = "acer";
$laptop_baru->processor ="intel core i5";
$laptop_baru->memory = "2 GB";
 
//panggil method objek
echo $laptop_baru->beli_komputer();
echo "<br />";
echo $laptop_baru->lihat_spec();
?>

Dalam contoh kode ini terdapat class komputer dengan beberapa property dan sebuah method. Semua property milik class komputer masih belum berisi nilai apa-apa.

Di bawah class komputer, saya membuat class laptop extends class komputer. Disini terjadi penurunan class komputer kepada class laptop. Hasilnya, di dalam class laptop kita bisa mengakses seluruh property dan method apapun milik class komputer selama memiliki hak akses public atau protected.

Untuk membuktikan hal tersebut, saya membuat objek $laptop_baru dari class laptop. Perhatikan bahwa kita bisa mengakses property $merk, $processor, dan$memory yang semuanya adalah milik class komputer, bukan class laptop.

Method beli_komputer() juga sukses diakses dari objek $laptop baru. Inilah yang dimaksud dengan inheritance/penurunan class dalam OOP.

PHP tidak membatasi berapa banyak penurunan objek yang bisa dilakukan. Dalam contoh berikut saya membuat 3 buah class yang saling diturunkan:

<?php
// buat class komputer
class komputer {
   protected function beli_komputer() {
     return "Beli komputer baru";
   }
}
 
// turunkan class komputer ke laptop
class laptop extends komputer {
   protected function beli_laptop() {
     return "Beli laptop baru";
   }
}
 
// turunkan class laptop ke chromebook
class chromebook extends laptop {
   protected function beli_chromebook() {
     return "Beli chromebook baru";
   }
 
   public function beli_semua(){
     $a = $this->beli_komputer();
     $b = $this->beli_laptop();    
     $c = $this->beli_chromebook();
     return "$a <br /> $b <br /> $c";
   }
}
 
// buat objek dari class laptop (instansiasi)
$gadget_baru = new chromebook();
 
//panggil method objek
echo $gadget_baru->beli_semua();
 
// $gadget_baru->beli_komputer();
// Fatal error: Call to protected method komputer::beli_komputer()
?>

Di awal kode program saya membuat class komputer yang diturunkan kepada class laptop. Class laptop ini kemudian diturunkan lagi kepada class chromebook. Dari dalam class chromebook ini di panggil method-model milik class diatasnya.

Jika anda perhatikan, setiap method selain method beli_semua(), juga menggunakan hak akses protected. Hak akses protected ini menghalangi kode program lain untuk mengaksesnya, selain class turunan.

Pada baris terakhir saya menyisipkan kode program untuk mencoba mengakses method beli_komputer(). Kode ini sengaja diberi tanda komentar karena PHP akan mengeluarkan error karena kita tidak bisa mengakses method dengan hak akses protected:

<?
$gadget_baru->beli_komputer();
// Fatal error: Call to protected method komputer::beli_komputer()
?>

Inilah salah satu penerapan enkapsulasi dalam OOP PHP. Yakni membatasi method yang tidak boleh diakses akan membuat kode program menjadi lebih terstruktur.

Penjelasan lebih jauh tentang enkapsulasi sudah kita bahas dalam Tutorial OOP PHP: Pengertian Enkapsulasi Objek (Public, Protected dan Private)

Dalam tutorial belajar OOP PHP kali ini, kita telah pelajari konsep inheritance atau pewarisan dalam pemrograman objek.

Penurunan class memiliki permasalahan tersendiri ketika terdapat property atau method dengan nama yang sama di parent class dan child class. Mengenai hal ini akan kita bahas dalam tutorial belajar OOP PHP berikutnya: Cara Mengakses Property dan Method Parent Class.


eBook OOP PHP Uncover Duniailkom
Duniailkom telah menerbitkan buku yang secara detail membahas pemrograman object PHP. Mulai dari materi dasar OOP seperti class, object, property, hingga trait, namespace, autoloading dan exception. Di akhir buku juga terdapat studi kasus pembuatan library dan aplikasi CRUD. Penjelasan lebih lanjut bisa ke eBook OOP PHP Uncover Duniailkom.

36 Comments

  1. Falah
    16 Dec 14
    • Andre
      16 Dec 14
      • Ridho
        19 Oct 17
  2. adipurnomo
    30 Dec 14
    • Andre
      30 Dec 14
  3. Redo Kusuma
    27 Jan 15
  4. Adi Ristian
    08 Feb 15
    • Andre
      09 Feb 15
  5. Rega Prayudha
    04 Mar 15
  6. jono
    10 Jul 15
    • jono
      10 Jul 15
    • Andre
      10 Jul 15
  7. jono
    10 Jul 15
    • Andre
      10 Jul 15
  8. Ramdan
    22 Oct 15
  9. ayus irfang
    26 Jan 16
    • Andre
      26 Jan 16
      • ayus irfang
        28 Jan 16
        • Andre
          28 Jan 16
  10. Rochafi
    28 Apr 16
    • Andre
      28 Apr 16
  11. Rochafi
    28 Apr 16
    • Rochafi
      28 Apr 16
    • Andre
      28 Apr 16
  12. Rochafi
    28 Apr 16
    • Andre
      28 Apr 16
  13. jose
    09 Feb 17
    • Andre
      11 Feb 17
  14. Rudi
    19 Feb 17
  15. Rian
    09 Jul 17
    • Andre
      09 Jul 17
  16. ilham
    02 Aug 17
    • bantu
      18 Sep 17
  17. Aris
    13 Sep 19
    • Andre
      14 Sep 19
  18. Kyuharu
    08 Sep 20

Add Comment

Leave a Reply to Andre Cancel reply