Belajar Pemrograman OOP PHP Part 9 - Belajar Menggunakan Property Dan Method Parent Class Pada Pemrograman Dasar PHP
Meneruskan panduan OOP PHP tentang Inheritance, kesempatan ini kita akan pelajari langkah mengakses properti dan metode dari parent class, dan pengertian Scope Resolution Operator.
Langkah Mengakses Properti dan Metode Parent Class
Konsep pewarisan/inheritance di mana sebuah class dapat mempunyai properti dan metode dari class lain, menjadi persoalan saat properti atau metode dari class anak mempunyai nama yang serupa dengan class induk, atau dikenal dengan istilah overridden properti dan overridden metode.
Untuk memahami pengertian overridden properti dan overridden metode, lihat contoh code program berikut:
<?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 code program di atas, saya membuat 2 buah class: computer dan laptop. Saya menurunkan class computer di dalam class laptop, hingga semua properti dan metode dari class computer dapat diakses dari class laptop.
Tetapi lihat jika metode pada class computer mempunyai nama yang serupa dengan metode dalam class laptop. Saat kita memanggil metode lihat_spec(), metode mana yang akan dijalankan?
Bila anda jalankan code di atas, maka hasilnya ialah:
Spec Laptop: Asus, Processor Intel core i5, Ram 2GB
Berdasar pada hasil yang diperoleh, kelihatan jika metode yang dijalankan ialah metode milik class laptop.
Dalam PHP, saat nama properti atau nama metode child class mempunyai nama yang serupa dengan parent class, karena itu yang dijalankan ialah properti atau metode milik child class.
Maka bagaimanakah cara mengakses properti dan metode milik class computer? PHP menangani ini dengan memakai ‘Scope Resolution Operator'.
Pengertian Scope Resolution Operator PHP
Scope Resolution Operator ialah operator khusus dalam PHP yang memungkinkannya kita untuk mengakses ‘informasi khusus‘ dari dalam class.
Info khusus ini terbagi dalam: overridden properti atau overridden metode, static properti atau static metode, dan constanta class. Untuk sekarang ini, kita akan konsentrasi ke overridden properti atau overridden metode. Mengenai static properti, static metode, dan konstanta class akan kita ulas dalam panduan yang lain.
Scope Resolution Operator dicatat dengan tanda dua kali titik dua (double colon), yaitu "::". Untuk mengakses properti dan metode dari class induk, kita mengaksesnya dengan perintah:
parent::nama_property;
parent::nama_method();
Kembali kepada contoh program, kali ini kita akan 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();
?>
Code program di atas ialah koreksi dari contoh kita sebelumnya. Saya menambahkan sebuah metode lihat_spec_komputer() di dalam class laptop. Metode ini selanjutkan akan memanggil metode class computer, dengan perintah parent::lihat_spec().
Hasilnya ialah:
Spec Laptop: Asus, Processor Intel core i5, Ram 2GB
Spec Komputer: Acer, Processor Intel core i7, Ram 4GB
Contoh di atas ialah langkah mengakses metode parent class dari child class.Lalu bagaimana dengan mengakses parent properti dari child class? Bila anda berpikir sama dengan saya, karena itu kita dapat terka jika caranya ialah memakai 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 code program di atas, saya menambahkan sebuah metode baru: lihat_merk_komputer() yang akan menjalankan perintah return parent::$merk. Bila kita menjalankan program di atas, hasilnya ialah:
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 akan terjadi?
Error di atas membuat saya kebingungan pertama kalinya mencobanya. Code error di atas memiliki arti kita coba mengakses properti static $merk dari class computer, bukan properti public $merk dari class computer seperti code error (Properti static berbeda dengan properti biasa, kita akan mempelajarinya sesaat lagi di: Pengertian static properti dan static metode).
Pengertian static properti belum kita dalami sampai panduan ini kali, dan akan saya bahas lengkap pada panduan tertentu. Tetapi berdasar code error itu dan membaca sejumlah sumber, saya merasakan jika kita tidak dapat mengakses properti parent class secara langsung.
Maka bagaimana caranya?
Yang perlu menjadi perhatian di sini ialah jika code kita di sini mempunyai nama metode dan properti yang serupa baik di child class dan pada parent class. Jalan keluar yang termudah ialah: tidak memakai nama properti dan metode yang serupa. Dengan begitu, code program akan jadi lebih terang serta lebih gampang untuk dimengerti.
Dalam panduan ini kali, kita sudah pelajari langkah mengakses properti dan metode parent class dengan Scope Resolution Operator, atau pertanda ‘::'.
Dalam panduan seterusnya, masih terkait dengan inheritance, kita akan pelajari dampak penurunan ini di dalam constructor dan destructor. Kita akan pelajari langkah mengakses constructor dan destructor parent class.