Мероси гирифтан аз синф ва амалӣ кардани интерфейс дар ООП дар 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
{
}
?>
Дар ҳамон вақт мо медонем, ки синфи Programmer
бояд интерфейси
iProgrammer-ро амалӣ кунад:
<?php
class Programmer implements iProgrammer
{
}
?>
Биёед мероси гирифтан аз синфи
Employee ва амалӣ кардани интерфейси
iProgrammer-ро якҷоя кунем:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Натиҷа ин хоҳад буд, ки синфи мо Programmer
аз синфи Employee методҳои
__construct, getName ва getSalary-ро мерос мегирад,
ва методҳои addLang ва getLangs
мо бояд амалӣ кунем:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// амалӣ кардан
}
public function getLangs()
{
// амалӣ кардан
}
}
?>
Ба интерфейси iProgrammer фарқе надорад,
методҳо аслианд ё аз мерос гирифташудаанд
– асосӣ ин аст, ки ҳамаи методҳои тавсифшуда бояд
амалӣ карда шаванд.
Коди синфи ман Employee
ва коди интерфейси iProgrammer-ро нусхабардорӣ кунед.
Пойгоҳи синфи ман Programmer-ро нусхабардорӣ накунед –
бе нигоҳ кардан ба коди ман, ин синфро
худ амалӣ кунед.