Klasės paveldėjimas ir interfeiso realizavimas OOP PHP
Klasė gali paveldėti iš kitos klasės ir tuo pačiu metu realizuoti kokį nors interfeisą. Panagrinėkime praktiniu pavyzdžiu.
Tarkime, norime sukurti klasę Programmer,
kuri turės vardą, atlyginimą ir kalbų sąrašą,
kurias programuotojas moka.
Kol kas mūsų klasės aprašymas yra gana miglotas:
taip, klasėje bus vardas, atlyginimas, kalbos -
bet kokie metodai bus mūsų klasėje?
Leiskite tiksliau apibūdinti mūsų klasę naudodami
interfeisą iProgrammer:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Tarkime, mes pasidomėjome jau mumis realizuotomis
klasėmis ir, pasirodo, mes jau turime panašią
klasę Employee. Ji realizuoja ne visus
klasės Programmer metodus, bet dalį.
Štai jau mūsų egzistuojančios klasės kodas:
<?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;
}
}
?>
Logiška mūsų atveju padaryti taip, kad
mūsų nauja klasė Programmer paveldėtų
dalinį reikalingų sau metodų iš klasės
Employee (o dalį mes vėliau realizuosime
jau pačioje naujoje klasėje):
<?php
class Programmer extends Employee
{
}
?>
Tuomet mums žinoma, kad klasė Pogrammer
turi realizuoti interfeisą
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Sujungkime paveldėjimą iš klasės
Employee ir interfeiso realizavimą
iProgrammer:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Taip mūsų klasė Pogrammer
paveldės iš klasės Employee metodus
__construct, getName ir getSalary,
o metodus addLang ir getLangs
mums teks realizuoti:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// realizacija
}
public function getLangs()
{
// realizacija
}
}
?>
Interfeisui iProgrammer vis vien,
gimdieji metodai klasėje ar paveldėti
- svarbiausia, kad visi aprašyti metodai būtų
realizuoti.
Nukopijuokite mano klasės Employee kodą
ir interfeiso iProgrammer kodą. Nekopijuokite
mano klasės Programmer ruošinio -
nežiūrėdami į mano kodą realizuokite šią
klasę savarankiškai.