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 класстын үлгүсүн көчүрбөңүз -
менин кодго карабай, бул
классты өз алдыңызча ишке ашырыңыз.