background icons
background icons 2
Memahami Konsep OPP Inheritance (Pewarisan) dalam PHP
Fitri Hy Fitri Hy
Tutorial 14-09-2024

Memahami Konsep OPP Inheritance (Pewarisan) dalam PHP

Inheritance atau Pewarisan adalah salah satu konsep fundamental dalam Object-Oriented Programming (OOP) yang memungkinkan sebuah class untuk mewarisi properti dan metode dari class lain. Dengan pewarisan, Anda dapat menggunakan kembali kode yang sudah ada dan membuat struktur yang lebih efisien serta mudah dipelihara. Dalam artikel ini, kita akan membahas secara mendalam konsep inheritance di PHP.
Apa Itu Inheritance (Pewarisan)?

Inheritance memungkinkan kita untuk membuat class baru yang mewarisi sifat-sifat dari class lain. Dengan kata lain, Anda dapat membuat class yang lebih spesifik berdasarkan class yang lebih umum. Class yang mewariskan disebut parent class (class induk), sedangkan class yang menerima warisan disebut child class (class anak).

Dengan menggunakan inheritance, Anda dapat:

  • Mengurangi duplikasi kode: Alih-alih mendefinisikan ulang properti dan metode yang sama di berbagai class, Anda bisa mewariskannya dari satu class induk.
  • Membuat struktur yang lebih jelas: Hierarki class dapat diatur dengan logis, misalnya, class induk menyimpan atribut dan fungsi dasar, sementara class anak menyimpan atribut dan fungsi yang lebih spesifik.

Sintaks Dasar Inheritance di PHP

Untuk menggunakan inheritance di PHP, Anda bisa menggunakan keyword extends pada class anak yang ingin mewarisi properti dan metode dari class induk.

Berikut contoh sederhananya:

class Animal {
    public $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function eat() {
        echo $this->name . " is eating.";
    }
}

class Dog extends Animal {
    public function bark() {
        echo $this->name . " is barking.";
    }
}

$dog = new Dog("Buddy");
$dog->eat();   // Output: Buddy is eating.
$dog->bark();  // Output: Buddy is barking.

Pada contoh di atas:

  • Class Animal merupakan parent class yang memiliki properti $name dan metode eat().
  • Class Dog merupakan child class yang mewarisi semua properti dan metode dari class Animal, serta memiliki metode tambahan bark().

Pewarisan dan Konstruktor

Dalam PHP, class anak bisa memiliki constructor sendiri atau bisa menggunakan constructor dari class induk. Jika class anak tidak memiliki constructor, PHP akan otomatis memanggil constructor dari class induk.

Jika Anda ingin memanggil constructor dari class induk secara eksplisit, Anda bisa menggunakan keyword parent::__construct().

class Animal {
    public $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function eat() {
        echo $this->name . " is eating.";
    }
}

class Dog extends Animal {
    public function __construct($name, $breed) {
        parent::__construct($name);  // Memanggil constructor parent class
        $this->breed = $breed;
    }

    public function bark() {
        echo $this->name . " is barking.";
    }
}

$dog = new Dog("Buddy", "Labrador");
$dog->eat();   // Output: Buddy is eating.
$dog->bark();  // Output: Buddy is barking.

Dalam contoh ini, constructor Dog memanggil constructor dari class Animal menggunakan parent::__construct($name) sehingga properti $name tetap bisa diakses dari class Animal.

Mengganti (Overriding) Metode

Dalam PHP, child class bisa mengganti (override) metode dari parent class dengan mendefinisikan ulang metode tersebut. Anda juga bisa memanggil metode dari parent class menggunakan keyword parent::method().

class Animal {
    public function sound() {
        echo "The animal makes a sound.";
    }
}

class Dog extends Animal {
    public function sound() {
        echo "The dog barks.";
    }
}

$dog = new Dog();
$dog->sound();  // Output: The dog barks.

Pada contoh di atas, metode sound() pada class Dog menggantikan implementasi dari sound() pada class Animal.

Access Modifier dalam Inheritance

PHP menggunakan tiga jenis access modifier: public, protected, dan private yang mempengaruhi cara properti dan metode diakses dalam inheritance.

  • Public: Bisa diakses dari mana saja, baik dari dalam class maupun dari luar class.
  • Protected: Hanya bisa diakses dari dalam class itu sendiri dan class anak yang mewarisinya.
  • Private: Hanya bisa diakses dari dalam class itu sendiri, tidak bisa diakses oleh class anak.
class Animal {
    protected $name;

    public function __construct($name) {
        $this->name = $name;
    }

    protected function eat() {
        echo $this->name . " is eating.";
    }
}

class Dog extends Animal {
    public function bark() {
        echo $this->name . " is barking.";
    }

    public function dogEat() {
        $this->eat();  // Memanggil metode protected dari parent class
    }
}

$dog = new Dog("Buddy");
$dog->bark();    // Output: Buddy is barking.
$dog->dogEat();  // Output: Buddy is eating.

Dalam contoh di atas, properti $name dan metode eat() bersifat protected, sehingga hanya bisa diakses dari class Animal dan Dog, tapi tidak dari luar.
Final Keyword

Untuk mencegah sebuah class atau metode diwariskan atau di-override, PHP menyediakan keyword final. Jika class diberi final, class tersebut tidak dapat diwariskan oleh class lain. Jika metode diberi final, metode tersebut tidak dapat di-override oleh class anak.

final class Animal {
    // Class ini tidak bisa diwariskan
}

class Dog extends Animal {  // Error: Cannot extend final class
    // ...
}

Kesimpulan

Inheritance adalah salah satu fitur terpenting dari OOP yang membuat kode lebih modular, terorganisir, dan mudah untuk diperbarui. Dengan memahami dan memanfaatkan inheritance di PHP, Anda bisa menulis kode yang lebih efisien dan dapat digunakan kembali. Konsep ini memungkinkan Anda untuk mengurangi duplikasi, memudahkan pemeliharaan, dan membuat sistem yang lebih fleksibel dan terstruktur.

Apakah Anda sudah siap untuk mulai menerapkan inheritance dalam kode PHP Anda? Dengan memahami dasar-dasar dan teknik lanjutan yang telah dibahas di atas, Anda sekarang memiliki pemahaman yang solid untuk mengoptimalkan penggunaan inheritance di proyek Anda.