Bag. 11 : Cara Mengakses Constructor dan Destructor Parent Class


 

Efek Inheritance dalam Constructor dan Destructor

Seperti yang telah kita pelajari dalam tutorial Tutorial Belajar OOP PHP: Pengertian Constructor dan Destructor, construktor dan destructor adalah method khusus yang dijalankan secara otomatis ketika sebuah class di instansiasi ke dalam sebuah objek, dan ketika objek tersebut dihapus.

 

Konsep inhertitance atau pewarisan class memiliki efek khusus dalam construktor dan destructor. Terutama construktor dan destructor dari parent class.

 

Mari kita jelaskan dengan menggunakan contoh:

 

<?php

// buat class komputer

class komputer {

 

   // buat constructor class komputer

   public function __construct() {

     echo "Constructor dari class komputer <br />";

   } 

 

   // buat destructor class komputer

   public function __destruct() {

     echo "Destructor dari class komputer <br />";

   }

}

 

// turunkan class komputer ke laptop

class laptop extends komputer {

}

 

// turunkan class laptop ke chromebook

class chromebook extends laptop {

}

// buat objek dari class chromebook (instansiasi)

$gadget_baru = new chromebook();

 

echo "Belajar OOP PHP <br />";

?>

 

Pada kode diatas, saya membuat class komputer dengan construktor dan destructor. Class komputer kemudian diturunkan kepada class laptop, kemudian diturunkan kembali kepada class chromebook. Baik class laptop maupun class chromebook tidak memiliki property maupun method. Class chromebook inilah yang akan kita instansiasi kedalam objek $gadget_baru.

 

Ketika program itu dijalankan, berikut adalah hasil yang didapat:

               

Constuctor dari class komputer

Belajar OOP PHP

Destructor dari class komputer

 

Dari hasil tersebut terlihat bahwa constructor dan destructor class komputer tetap dijalankan walaupun kita membuat objek dari class chromebook.

 

Pengertian Overridden Constructor dan Overridden Destructor

Dalam kode program diatas, saya tidak membuat constructor dan destructor untuk class laptop dan class chromebook. Tapi bagaimana jika ketiga class ini juga memiliki constructor dan destructor? Mari kita coba:

               

<?php

// buat class komputer

class komputer {

   

   // buat constructor class komputer

   public function __construct() {

     echo "Constructor dari class komputer <br />";

   } 

 

   // buat destructor class komputer

   public function __destruct() {

     echo "Destructor dari class komputer <br />";

   }

}

 

// turunkan class komputer ke laptop

class laptop extends komputer {

   

   // buat constructor class laptop

   public function __construct() {

     echo "Constructor dari class laptop <br />";

   } 

 

   // buat destructor class laptop

   public function __destruct() {

     echo "Destructor dari class laptop";

   }

}

 

// turunkan class laptop ke chromebook

class chromebook extends laptop {

 

   // buat constructor class chromebook

   public function __construct() {

     echo "Constructor dari class chromebook <br />";

   } 

 

   // buat destructor class chromebook

   public function __destruct() {

     echo "Destructor dari class chromebook <br />";

   }

}

// buat objek dari class chromebook (instansiasi)

$gadget_baru = new chromebook();

 

echo "Belajar OOP PHP <br />";

?>

 

Kode diatas memiliki constructor dan destructor pada masing-masing class, mari kita lihat hasilnya:

 

Constuctor dari class chromebook

Belajar OOP PHP

Destructor dari class chromebook

 

Kemana constructor dan destructor class lainnya?

 

Di dalam PHP, ketika child class memiliki constructor dan destructor sendiri, maka PHP akan melewatkan constructor dan destructor parent class, kasus ini disebut dengan Overridden Constructor dan Overridden Destructor. Karena di dalam contoh kita class chromebook memiliki constructor dan destructor, maka constructor dan destructor class induknya tidak dijalankan.

 

Bagaimana jika kita ingin constructor dan destructor parent class tetap dijalankan?

 

Solusinya, kita harus memanggil constructor dan destructor parent class secara manual dengan Scope Resolution Operator, yakni: parent::__construct() dan parent::__desctruct().

 

Berikut adalah modifikasi kode program kita diatas:

               

<?php

// buat class komputer

class komputer {

   public function __construct() {

     echo "Constructor dari class komputer <br />";

   }

 

   public function __destruct() {

     echo "Destructor dari class komputer <br />";

   }

}

 

// turunkan class komputer ke laptop

class laptop extends komputer {

   public function __construct() {

     parent::__construct();

     echo "Constructor dari class laptop <br />";

}

 

   public function __destruct() {

     echo "Destructor dari class laptop <br />";

     parent::__destruct();

   }

}

 

// turunkan class laptop ke chromebook

class chromebook extends laptop {

   public function __construct() {

     parent::__construct();

     echo "Constructor dari class chromebook <br />";

   }

 

   public function __destruct() {

     echo "Destructor dari class chromebook <br />";

     parent::__destruct();

   }

}

 

// buat objek dari class chromebook (instansiasi)

$gadget_baru = new chromebook();

 

echo "Belajar OOP PHP <br />";

?>

 

Hasil yang kita dapat adalah:

               

Constructor dari class komputer

Constructor dari class laptop

Constructor dari class chromebook

Belajar OOP PHP

Destructor dari class chromebook

Destructor dari class laptop

Destructor dari class komputer

 

Dengan memanggil manual perintah parent::__construct() dan parent::__desctruct(), kita bisa menjalankan seluruh constructor dan destructor dari parent class.