Դասից ժառանգում և ինտերֆեյսի իրականացում OOP-ում PHP-ում
Դասը կարող է ժառանգել մեկ այլ դասից և միաժամանակ իրականացնել ինչ-որ ինտերֆեյս։ Դիտարկենք գործնական օրինակով։
Ենթադրենք՝ մենք ուզում ենք ստեղծել Programmer դասը,
որը կունենա անուն, աշխատավարձ և ծրագրավորողի իմացած
լեզուների ցուցակ։
Առայժմ մեր դասի նկարագրությունը բավականին անորոշ է.
այո, դասում կլինեն անուն, աշխատավարձ, լեզուներ -
բայց ինչ մեթոդներ կլինեն մեր դասում։
Եկեք ավելի ճշգրիտ նկարագրենք մեր դասը
iProgrammer ինտերֆեյսի միջոցով.
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Ենթադրենք՝ մենք խուզարկեցինք արդեն մեր կողմից իրականացված
դասերը և, պարզվում է, որ մենք արդեն ունենք նմանատիպ
Employee դաս։ Այն չի իրականացնում Programmer դասի
բոլոր մեթոդները, այլ միայն մի մասը։
Ահա մեր մոտ արդեն գոյություն ունեցող դասի կոդը.
<?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;
}
}
?>
Տրամաբանական է մեր դեպքում անել այնպես, որ
մեր նոր Programmer դասը ժառանգի
անհրաժեշտ մեթոդների մի մասը Employee դասից
(իսկ մնացածը մենք հետագայում կիրականացնենք
արդեն հենց նոր դասի ներսում).
<?php
class Programmer extends Employee
{
}
?>
Միաժամանակ մեզ հայտնի է, որ Pogrammer դասը
պետք է իրականացնի iProgrammer ինտերֆեյսը.
<?php
class Programmer implements iProgrammer
{
}
?>
Եկեք համատեղենք Employee դասից ժառանգումը
և iProgrammer ինտերֆեյսի իրականացումը.
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Ստացվում է, որ մեր Pogrammer դասը
Employee դասից կժառանգի __construct, getName և getSalary մեթոդները,
իսկ addLang և getLangs մեթոդները
մենք պետք է իրականացնենք.
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// իրականացում
}
public function getLangs()
{
// իրականացում
}
}
?>
iProgrammer ինտերֆեյսին անտարբեր է.
սեփական մեթոդներն են դասի, թե ժառանգված.
գլխավորն այն է, որ բոլոր նկարագրված մեթոդները
լինեն իրականացված։
Պատճենեք իմ Employee դասի կոդը
և iProgrammer ինտերֆեյսի կոդը։ Մի պատճենեք
իմ Programmer դասի կաղապարը.
առանց իմ կոդին նայելու, ինքնուրույն իրականացրեք այս
դասը։