Mengakses Property dan Method Parent Class

♠ Posted by Unknown in at 05.59

Mengakses Property dan Method Parent Class


        Konsep pewarisan/inheritance dimana sebuah class bisa memiliki property dan method dari class lain, bisa menjadi permasalahan ketika property atau method dari class anak memiliki nama yang sama dengan class induk, atau dikenal dengan istilah overridden property dan overridden method.

Contoh :

<?php
// buat class tablet
class tablet {
 
   public function lihat_spec() {
     return "Spec tablet: Lenovo, 
     Camera 8 Pixel, Memory 8GB";
   }
}
 
// turunkan class tablet ke iphone
class iphone extends tablet {
 
   public function lihat_spec() {
     return "Spec iphone: Apple, 
     Camera 8 Pixel, Memory 4GB";
   }
}
// buat objek dari class iphone (instansiasi)
$gadget_baru = new iphone();
 
//panggil method lihat_spec()
echo $gadget_baru->lihat_spec();
?>
 
     Pada kode program diatas, dibuat 2 buah class: tablet dan iphone. Kemudian class tablet diturunkan kedalam class iphone, sehingga seluruh property dan method dari class tablet bisa diakses dari class iphone.
Namun perhatikan bahwa method pada class tablet memiliki nama yang sama dengan method dalam class iphone. Ketika kita memanggil method lihat_spec(), method manakah yang akan dijalankan ?

Jika anda menjalankan kode diatas, maka hasilnya adalah:


Spec iphone: Apple, Camera 8 Pixel, Memory 4GB 


     Berdasarkan hasil yang di dapat, terlihat bahwa method yang dijalankan adalah method milik class laptop. Di dalam PHP, ketika nama property atau nama method child class memiliki nama yang sama dengan parent class, maka yang dijalankan adalah property atau method milik child class. Jadi, bagaimana cara mengakses property dan method milik class komputer? PHP mengatasi hal ini dengan menggunakan ‘Scope Resolution Operator’.

Scope Resolution Operator PHP
  
      Scope Resolution Operator adalah operator khusus di dalam PHP yang memungkinkan kita untuk mengakses ‘informasi khusus‘ dari dalam class.
Informasi khusus ini terdiri dari: overridden property atau overridden method, static property atau static method, serta constanta class. Untuk saat ini, kita akan fokus kepada overridden property atau overridden method. Mengenai static property, static method, dan konstanta class akan kita bahas dalam tutorial lainnya.

Scope Resolution Operator ditulis dengan tanda dua kali titik dua (double colon), yakni “::”. Untuk mengakses property dan method dari class induk, kita mengaksesnya dengan perintah :

parent::nama_property;
parent::nama_method();

contoh program :

kali ini kita ingin menampilkan method lihat_spec() dari class komputer :

<?php
// buat class tablet
class tablet {
 
   public function lihat_spec() {
     return "Spec tablet: Lenovo, 
     Camera 8 Pixel, Memory 8GB";
   }
}
 
// turunkan class tablet ke iphone
class iphone extends tablet {
 
   public function lihat_spec() {
     return "Spec iphone: Apple, 
     Camera 8 Pixel, Memory 4GB";
   }
   
   public function lihat_spec_tablet() {
     return parent::lihat_spec();
   }
}
// buat objek dari class iphone (instansiasi)
$gadget_baru = new iphone();
 
//panggil method lihat_spec()
echo $gadget_baru->lihat_spec();

echo "<br />";

//panggil method lihat_spec_tablet()
echo $gadget_baru->lihat_spec_tablet();
?>

      Kode program diatas pembuat program menambahkan sebuah method lihat_spec_tablet() kedalam class iphone. Method ini selanjutkan akan memanggil method class tablet, dengan perintah parent::lihat_spec().
 
Hasilnya adalah :

Spec iphone: Apple, Camera 8 Pixel, Memory 4GB
Spec tablet: Lenovo, Camera 8 Pixel, Memory 8GB

     Contoh diatas adalah cara mengakses method parent class dari child class. Lalu bagaimana dengan cara mengakses parent property dari child class? caranya adalah menggunakan parent::nama_property.

<?php
// buat class tablet
class tablet {
 
   public $merk = "Lenovo";
 
   public function lihat_spec() {
     return "Spec Tablet: lenovo, 
     Camera 8 Pixel, Memory 8GB";
   }
}
 
// turunkan class tablet ke iphone
class iphone extends tablet {
   public $merk = "Apple";
 
   public function lihat_spec() {
     return "Spec iphone: Apple, 
     Camera 8 Pixel, Memory 4GB";
   }
   
   public function lihat_spec_tablet() {
     return parent::lihat_spec();
   }
   public function lihat_merk_tablet() {
     return parent::$merk;
   }
}
// buat objek dari class laptop (instansiasi)
$gadget_baru = new iphone();
 
//panggil method lihat_spec()
echo $gadget_baru->lihat_spec();

echo "<br />";

//panggil method lihat_spec_tablet()
echo $gadget_baru->lihat_spec_tablet();

//panggil method lihat_merk_tablet()
echo $gadget_baru->lihat_merk_tablet();
?> 
 

Dalam kode program diatas, pembuat program menambahkan sebuah method baru: lihat_merk_tablet() yang akan menjalankan perintah return parent::$merk. Jika kita menjalankan program diatas, hasilnya adalah:

Spec iphone: Apple, Camera 8 Pixel, Memory 8GB
Spec Tablet: Lenovo, Camera 8 Pixel, Memory 4GB
Fatal error: Access to undeclared static property: tablet::$merk

      Kode error diatas berarti kita mencoba mengakses property static $merk dari class tablet, bukan property public $merk dari class tablet sebagaimana kode error (Property static tidak sama dengan property biasa.

      Yang perlu menjadi perhatian disini adalah bahwa kode kita disini memiliki nama method dan property yang sama baik di child class dan juga pada parent class. Solusi yang paling mudah adalah: tidak menggunakan nama property dan method yang sama. Dengan demikian, kode program akan menjadi lebih jelas dan lebih mudah untuk dipahami.


Sumber : http://www.duniailkom.com


 
 




0 komentar:

Posting Komentar