Klassipärimine ja liidese rakendamine OOP-s PHP-s
Klass võib pärida teisest klassist ja samal ajal rakendada mõnda liidest. Vaatame praktilisel näitel.
Oletame, et tahame teha klassi Programmer,
millel on nimi, palk ja programmeerija poolt
tuntud keelte loend.
Meie klassi kirjeldus on praegu üsna ebamäärane:
jah, klassis on nimi, palk, keeled -
aga millised meetodid meie klassis on?
Kirjeldame oma klassi täpsemalt
liidese iProgrammer abil:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Oletame, et me otsisime läbi juba realiseeritud
klassid ja selgub, et meil on juba olemas sarnane
klass Employee. See ei rakenda kõiki
klassi Programmer meetodeid, vaid osa.
Siin on juba olemasoleva klassi kood:
<?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;
}
}
?>
Loogiline oleks meie juhul teha nii, et
meie uus klass Programmer pärib
osa vajalikke meetodeid klassist
Employee (ja osa realiseerime
hiljem juba uues klassis):
<?php
class Programmer extends Employee
{
}
?>
Samuti on meil teada, et klass Pogrammer
peab rakendama liidest
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Ühendame nüüd pärimise klassist
Employee ja liidese iProgrammer
rakendamise:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Tulemuseks on, et meie klass Pogrammer
pärib klassist Employee meetodid
__construct, getName ja getSalary,
kuid meetodid addLang ja getLangs
peame realiseerima ise:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// realiseerimine
}
public function getLangs()
{
// realiseerimine
}
}
?>
Liidesele iProgrammer on ükskõik,
kas meetodid on klassile oma või päritud -
peamine, et kõik kirjeldatud meetodid on
realiseeritud.
Kopeerige minu klassi Employee kood
ja liidese iProgrammer kood. Ärge kopeerige
minu klassi Programmer mustrit -
realiseerige see klass iseseisvalt, ilma minu koodi peale vaatamata.