Bag. 10 : Cara Mengakses Property dan Method Parent Class
Cara 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.
Untuk memahami pengertian overridden property dan overridden
method, perhatikan contoh kode program berikut ini:
<?php
//
buat class komputer
class
komputer {
public function lihat_spec() {
return "Spec Komputer: Acer,
Processor Intel core i7, Ram 4GB";
}
}
//
turunkan class komputer ke laptop
class
laptop extends komputer {
public function lihat_spec() {
return "Spec Laptop: Asus,
Processor Intel core i5, Ram 2GB";
}
}
//
buat objek dari class laptop (instansiasi)
$gadget_baru
= new laptop();
//panggil
method lihat_spec()
echo
$gadget_baru->lihat_spec();
?>
Pada kode program diatas, saya membuat 2 buah class: komputer dan
laptop. Saya menurunkan class komputer kedalam class laptop, sehingga seluruh
property dan method dari class komputer bisa diakses dari class laptop.
Namun perhatikan bahwa method pada class komputer memiliki nama
yang sama dengan method dalam class laptop. Ketika kita memanggil method
lihat_spec(), method manakah yang akan dijalankan?
Jika anda menjalankan kode diatas, maka hasilnya adalah:
Spec
Laptop: Asus, Processor Intel core i5, Ram 2GB
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’.
Pengertian
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();
Kembali kepada contoh program, kali ini kita ingin menampilkan
method lihat_spec() dari class komputer:
<?php
//
buat class komputer
class
komputer {
public function lihat_spec() {
return "Spec Komputer: Acer,
Processor Intel core i7, Ram 4GB";
}
}
//
turunkan class komputer ke laptop
class
laptop extends komputer {
public function lihat_spec() {
return "Spec Laptop: Asus,
Processor Intel core i5, Ram 2GB";
}
public function lihat_spec_komputer() {
return parent::lihat_spec();
}
}
//
buat objek dari class laptop (instansiasi)
$gadget_baru
= new laptop();
//panggil
method lihat_spec()
echo
$gadget_baru->lihat_spec();
echo
"<br />";
//panggil
method lihat_spec_komputer()
echo
$gadget_baru->lihat_spec_komputer();
?>
Kode program diatas adalah revisi dari contoh kita sebelumnya.
Saya menambahkan sebuah method lihat_spec_komputer() kedalam class laptop.
Method ini selanjutkan akan memanggil method class komputer, dengan perintah
parent::lihat_spec().
Hasilnya adalah:
Spec
Laptop: Asus, Processor Intel core i5, Ram 2GB
Spec
Komputer: Acer, Processor Intel core i7, Ram 4GB
Contoh diatas adalah cara mengakses method parent class dari child
class. Lalu bagaimana dengan cara mengakses parent property dari child class?
Jika anda berfikir sama seperti saya, maka kita bisa tebak bahwa caranya adalah
menggunakan parent::nama_property, apakah bisa? mari kita coba:
<?php
//
buat class komputer
class
komputer {
public $merk = "acer";
public function lihat_spec() {
return "Spec Komputer: Acer,
Processor Intel core i7, Ram 4GB";
}
}
//
turunkan class komputer ke laptop
class
laptop extends komputer {
public $merk = "asus";
public function lihat_spec() {
return "Spec Laptop: Asus,
Processor Intel core i5, Ram 2GB";
}
public function lihat_spec_komputer() {
return parent::lihat_spec();
}
public function lihat_merk_komputer() {
return parent::$merk;
}
}
//
buat objek dari class laptop (instansiasi)
$gadget_baru
= new laptop();
//panggil
method lihat_spec()
echo
$gadget_baru->lihat_spec();
echo
"<br />";
//panggil
method lihat_spec_komputer()
echo
$gadget_baru->lihat_spec_komputer();
//panggil
method lihat_merk_komputer()
echo
$gadget_baru->lihat_merk_komputer();
?>
Dalam kode program diatas, saya menambahkan sebuah method baru:
lihat_merk_komputer() yang akan menjalankan perintah return parent::$merk. Jika
kita menjalankan program diatas, hasilnya adalah:
Spec
Laptop: Asus, Processor Intel core i5, Ram 2GB
Spec
Komputer: Acer, Processor Intel core i7, Ram 4GB
<b>Fatal
error</b>: Access to undeclared static property: komputer::$merk
Apa yang terjadi?
Error diatas juga membuat saya bingung saat pertama kali
mencobanya. Kode error diatas berarti kita mencoba mengakses property static
$merk dari class komputer, bukan property public $merk dari class komputer
sebagaimana kode error (Property static tidak sama dengan property biasa, kita
akan mempelajarinya sesaat lagi di: Pengertian static property dan static
method).
Pengertian static property belum kita pelajari sampai tutorial
kali ini, dan akan saya bahas lengkap pada tutorial tersendiri. Namun
berdasarkan kode error tersebut dan membaca beberapa sumber, saya mendapati
bahwa kita tidak bisa mengakses property parent class secara langsung.
Jadi, bagaimana caranya?

Post a Comment