Trashëgimia nga Klasa dhe Implementimi i Ndërfaqes në OOP në PHP
Një klasë mund të trashëgojë nga një klasë tjetër dhe në të njëjtën kohë të implementojë një ndërfaqe. Le ta shqyrtojmë me një shembull praktik.
Le të themi se duam të bëjmë një klasë Programmer,
e cila do të ketë emër, pagë dhe një listë gjuhësh,
që programuesi i njeh.
Përshkrimi ynë i klasës është mjaft i paqartë:
po, në klasë do të ketë emër, pagë, gjuhë -
por cilat metoda do të ketë klasa jonë?
Le ta përshkruajmë klasën tonë më saktë me anë të
ndërfaqes iProgrammer:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Le të themi se kemi kërkuar në klasat tashmë të implementuara
dhe, del se ne tashmë kemi një klasë të ngjashme
Employee. Ajo nuk i implementon të gjitha
metodat e klasës Programmer, por një pjesë.
Këtu është kodi i klasës sonë ekzistuese:
<?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;
}
}
?>
Është logjike në rastin tonë të bëjmë në mënyrë që
klasa jonë e re Programmer të trashëgojë
pjesën e metodave të nevojshme nga klasa
Employee (dhe pjesën tjetër do ta implementojmë
më vonë në vetë klasën e re):
<?php
class Programmer extends Employee
{
}
?>
Në të njëjtën kohë, ne e dimë se klasa Pogrammer
duhet të implementojë ndërfaqen
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Le të kombinojmë trashëgiminë nga klasa
Employee dhe implementimin e ndërfaqes
iProgrammer:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Do të dalë që klasa jonë Pogrammer
do të trashëgojë nga klasa Employee metodat
__construct, getName dhe getSalary,
ndërsa metodat addLang dhe getLangs
do të na duhet t'i implementojmë ne:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// implementimi
}
public function getLangs()
{
// implementimi
}
}
?>
Ndërfaqes iProgrammer nuk i intereson,
metodat janë të lindura në klasë apo të trashëguara
- gjëja kryesore është që të gjitha metodat e përshkruara të jenë
të implementuara.
Kopjoni kodin e klasës sime Employee
dhe kodin e ndërfaqes iProgrammer. Mos e kopjoni
skeletin tim të klasës Programmer -
pa parë në kodin tim, implementoni këtë
klasë në mënyrë të pavarur.