Pewarisan daripada Kelas dan Pelaksanaan Antara Muka dalam OOP dalam PHP
Kelas boleh mewarisi daripada kelas lain dan pada masa yang sama melaksanakan antara muka tertentu. Mari kita lihat contoh praktikal.
Katakan kita ingin membuat kelas Programmer,
yang mempunyai nama, gaji dan senarai bahasa pengaturcaraan
yang diketahui oleh pengaturcara tersebut.
Penerangan kelas kita setakat ini agak kabur:
ya, kelas akan mempunyai nama, gaji, bahasa -
tetapi apakah kaedah yang akan ada dalam kelas kita?
Mari kita terangkan kelas kita dengan lebih tepat menggunakan
antara muka iProgrammer:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Katakan kita telah menyelidik kelas yang sudah
kita laksanakan dan, rupa-rupanya, kita sudah mempunyai kelas
Employee yang serupa. Ia tidak melaksanakan semua
kaedah kelas Programmer, tetapi sebahagian daripadanya.
Berikut adalah kod kelas yang sudah sedia ada:
<?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;
}
}
?>
Adalah logik dalam kes kita untuk membuat
kelas baru Programmer mewarisi
sebahagian kaedah yang diperlukan daripada kelas
Employee (dan sebahagian lagi kita akan laksanakan
kemudian dalam kelas baru itu sendiri):
<?php
class Programmer extends Employee
{
}
?>
Pada masa yang sama, kita tahu bahawa kelas Pogrammer
harus melaksanakan antara muka
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Mari gabungkan pewarisan daripada kelas
Employee dan pelaksanaan antara muka
iProgrammer:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Hasilnya, kelas Pogrammer kita
akan mewarisi daripada kelas Employee kaedah
__construct, getName dan getSalary,
sementara kaedah addLang dan getLangs
kita perlu laksanakan sendiri:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// pelaksanaan
}
public function getLangs()
{
// pelaksanaan
}
}
?>
Antara muka iProgrammer tidak peduli,
sama ada kaedah itu asli bagi kelas atau diwarisi
- yang penting, semua kaedah yang diterangkan mesti
dilaksanakan.
Salin kod kelas Employee saya
dan kod antara muka iProgrammer. Jangan salin
rangka kelas Programmer saya -
tanpa melihat kod saya, laksanakan
kelas ini secara sendiri.