Urithi kutoka kwa Tabaka na Utekelezaji wa Kiolesura katika OOP katika PHP
Tabaka linaweza kurithi kutoka kwa tabaka lingine na wakati huo huo kutekeleza kiolesura fulani. Tuchunguze kwa mfano wa vitendo.
Wacha tutake kutengeneza tabaka Programmer,
ambalo litakuwa na jina, mshahara na orodha ya lugha,
ambazo programmer anazijua.
Kwa sasa maelezo yetu ya tabaka yana maelezo machache sana:
ndio, katika tabaka kutakuwa na jina, mshahara, lugha -
lakini ni njia gani zitakuwapo kwenye tabaka letu?
Wacha tuelezee kwa usahihi zaidi tabaka letu kwa kutumia
kiolesura iProgrammer:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Wacha tuseme tulichunguza tabaka zilizotekelezwa tayari
na sisi na, inabadilika kuwa, tayari tunayo tabaka
Employee inayofanana. Haitekelezi zote
njia za tabaka Programmer, lakini sehemu.
Hiki ni msimbo wa tabaka ambalo tayari lipo kwetu:
<?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;
}
}
?>
Kwa mantiki katika kesi yetu ni kufanya hivi, ili
tabaka letu jipya Programmer lirithi
sehemu ya njia zinazohitajika kutoka kwa tabaka
Employee (na sehemu tutaitekeleza
baadaye tayari kwenye tabaka jipya lenyewe):
<?php
class Programmer extends Employee
{
}
?>
Wakati huo huo tunajua kuwa tabaka Pogrammer
linapaswa kutekeleza kiolesura
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Wacha tuunganishe urithi kutoka kwa tabaka
Employee na utekelezaji wa kiolesura
iProgrammer:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Itatokea kuwa tabaka letu Pogrammer
litarithi kutoka kwa tabaka Employee njia
__construct, getName na getSalary,
lakini njia addLang na getLangs
itabidi tutekeleze wenyewe:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// utekelezaji
}
public function getLangs()
{
// utekelezaji
}
}
?>
Kiolesura iProgrammer hakijali,
ni njia asilia za tabaka au zilizorithiwa
- jambo kuu, ni kwamba njia zote zilizoelezewa ziwe
zimetekelezwa.
Nakili msimbo wa tabaka langu Employee
na msimbo wa kiolesura iProgrammer. Usinakili
maandalizi yangu ya tabaka Programmer -
bila kuangalia kwenye msimbo wangu utekeleze
tabaka hili wewe mwenyewe.