Urithi kutoka kwa Tabaka na Utekelezaji wa Kiolesura katika OOP katika PHP

Tabaka linaweza kurithi kutoka kwa tabaka lingine na wakati huo huo kutekeleza kiolesura fulani. Tuchunguze kwa mfano wa vitendo.

Wacha tutake kutengeneza tabaka Programmer, ambalo litakuwa na jina, mshahara na orodha ya lugha, ambazo programmer anazijua. Kwa sasa maelezo yetu ya tabaka yana maelezo machache sana: ndio, katika tabaka kutakuwa na jina, mshahara, lugha - lakini ni njia gani zitakuwapo kwenye tabaka letu?

Wacha tuelezee kwa usahihi zaidi tabaka letu kwa kutumia kiolesura iProgrammer:

iProgrammer.php<?php
  interface iProgrammer
  {
    public function __construct($name, $salary);
    public function getName();
    public function getSalary();
    public function getLangs();
    public function addLang($lang);
  }
?>

Wacha tuseme tulichunguza tabaka zilizotekelezwa tayari na sisi na, inabadilika kuwa, tayari tunayo tabaka Employee inayofanana. Haitekelezi zote njia za tabaka Programmer, lakini sehemu. Hiki ni msimbo wa tabaka ambalo tayari lipo kwetu:

Employee.php<?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;
    }
  }
?>

Kwa mantiki katika kesi yetu ni kufanya hivi, ili tabaka letu jipya Programmer lirithi sehemu ya njia zinazohitajika kutoka kwa tabaka Employee (na sehemu tutaitekeleza baadaye tayari kwenye tabaka jipya lenyewe):

Programmer.php<?php
  class Programmer extends Employee
  {
    
  }
?>

Wakati huo huo tunajua kuwa tabaka Pogrammer linapaswa kutekeleza kiolesura iProgrammer:

Programmer.php<?php
  class Programmer implements iProgrammer
  {
    
  }
?>

Wacha tuunganishe urithi kutoka kwa tabaka Employee na utekelezaji wa kiolesura iProgrammer:

Programmer.php<?php
  class Programmer extends Employee implements iProgrammer
  {
    
  }
?>

Itatokea kuwa tabaka letu Pogrammer litarithi kutoka kwa tabaka Employee njia __construct, getName na getSalary, lakini njia addLang na getLangs itabidi tutekeleze wenyewe:

Programmer.php<?php
  class Programmer extends Employee implements iProgrammer
  {
    public function addLang($lang)
    {
       // utekelezaji
    }
    
    public function getLangs()
    {
       // utekelezaji
    }
  }
?>

Kiolesura iProgrammer hakijali, ni njia asilia za tabaka au zilizorithiwa - jambo kuu, ni kwamba njia zote zilizoelezewa ziwe zimetekelezwa.

Задание 1

Nakili msimbo wa tabaka langu Employee na msimbo wa kiolesura iProgrammer. Usinakili maandalizi yangu ya tabaka Programmer - bila kuangalia kwenye msimbo wangu utekeleze tabaka hili wewe mwenyewe.