Setelah membahas cara mengakses property dan method parent class, dalam tutorial belajar OOP PHP kali ini akan membahas cara mengakses constructor dan destructor parent class. Tutorial kali ini masih berkaitan dengan efek pewarisan (inheritance) dalam pemrograman objek.
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.
Dalam tutorial belajar Object Oriented Programming (OOP) PHP kali ini, kita telah mempelajari cara kerja constructor dan destructor jika sebuah class diturunkan dari class lain (inheritance).
Constructor dan destructor parent class akan dijalankan jika child class tidak mendefenisikan constructor dan destructor sendiri. Namun jika child class juga memiliki constructor dan desctructor, maka kita harus memanggil constructor dan destructor parent class secara manual.
Dalam tutorial OOP PHP berikutnya, kita akan mempelajari pengertian static property dan static method dalam pemrograman objek.