Pewarisan dari Kelas dan Implementasi Antarmuka dalam OOP di PHP
Sebuah kelas dapat mewarisi dari kelas lain dan pada saat yang sama mengimplementasikan suatu antarmuka. Mari kita lihat contoh praktisnya.
Misalkan kita ingin membuat kelas Programmer,
yang memiliki nama, gaji, dan daftar bahasa pemrograman
yang dikuasai oleh programmer tersebut.
Deskripsi kelas kita masih sangat samar-samar:
ya, di dalam kelas akan ada nama, gaji, bahasa -
tapi metode apa saja yang akan ada di kelas kita?
Mari kita deskripsikan kelas kita dengan lebih tepat menggunakan
antarmuka iProgrammer:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Misalkan kita telah menyelidiki kelas-kelas
yang sudah kita implementasikan dan, ternyata, kita sudah memiliki kelas
Employee yang serupa. Ia tidak mengimplementasikan semua
metode dari kelas Programmer, tetapi sebagian.
Berikut adalah kode kelas yang sudah ada yang kita miliki:
<?php
class Employee
{
private $name;
private $salary;
public function __construct($name, $salary)
{
$this->name = $name;
$this->salary = $salary;
}
public function getName()
{
return $this->name;
}
public function getSalary()
{
return $this->salary;
}
}
?>
Logis dalam kasus kita untuk membuat
kelas baru kita Programmer mewarisi
sebagian metode yang diperlukan dari kelas
Employee (dan sebagiannya lagi akan kita implementasikan
nanti di dalam kelas baru itu sendiri):
<?php
class Programmer extends Employee
{
}
?>
Pada saat yang sama, kita tahu bahwa kelas Programmer
harus mengimplementasikan antarmuka
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Mari gabungkan pewarisan dari kelas
Employee dan implementasi antarmuka
iProgrammer:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Hasilnya, kelas kita Programmer
akan mewarisi dari kelas Employee metode
__construct, getName dan getSalary,
sedangkan metode addLang dan getLangs
harus kita implementasikan sendiri:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// implementasi
}
public function getLangs()
{
// implementasi
}
}
?>
Bagi antarmuka iProgrammer, tidak masalah
apakah metode tersebut asli dari kelas atau diwariskan
- yang penting, semua metode yang dideskripsikan harus
terimplementasi.
Salin kode kelas Employee saya
dan kode antarmuka iProgrammer. Jangan menyalin
rancangan kelas Programmer saya -
tanpa melihat kode saya, implementasikan
kelas ini secara mandiri.