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 класымның дайындамасын көшірмеңіз -
менің кодымға қарамастан, осы
класты өз бетіңізше іске асырыңыз.