Դասից ժառանգում և ինտերֆեյսի իրականացում OOP-ում PHP-ում

Դասը կարող է ժառանգել մեկ այլ դասից և միաժամանակ իրականացնել ինչ-որ ինտերֆեյս։ Դիտարկենք գործնական օրինակով։

Ենթադրենք՝ մենք ուզում ենք ստեղծել Programmer դասը, որը կունենա անուն, աշխատավարձ և ծրագրավորողի իմացած լեզուների ցուցակ։ Առայժմ մեր դասի նկարագրությունը բավականին անորոշ է. այո, դասում կլինեն անուն, աշխատավարձ, լեզուներ - բայց ինչ մեթոդներ կլինեն մեր դասում։

Եկեք ավելի ճշգրիտ նկարագրենք մեր դասը iProgrammer ինտերֆեյսի միջոցով.

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

Ենթադրենք՝ մենք խուզարկեցինք արդեն մեր կողմից իրականացված դասերը և, պարզվում է, որ մենք արդեն ունենք նմանատիպ Employee դաս։ Այն չի իրականացնում Programmer դասի բոլոր մեթոդները, այլ միայն մի մասը։ Ահա մեր մոտ արդեն գոյություն ունեցող դասի կոդը.

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;
    }
  }
?>

Տրամաբանական է մեր դեպքում անել այնպես, որ մեր նոր Programmer դասը ժառանգի անհրաժեշտ մեթոդների մի մասը Employee դասից (իսկ մնացածը մենք հետագայում կիրականացնենք արդեն հենց նոր դասի ներսում).

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

Միաժամանակ մեզ հայտնի է, որ Pogrammer դասը պետք է իրականացնի iProgrammer ինտերֆեյսը.

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

Եկեք համատեղենք Employee դասից ժառանգումը և iProgrammer ինտերֆեյսի իրականացումը.

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

Ստացվում է, որ մեր Pogrammer դասը Employee դասից կժառանգի __construct, getName և getSalary մեթոդները, իսկ addLang և getLangs մեթոդները մենք պետք է իրականացնենք.

Programmer.php<?php
  class Programmer extends Employee implements iProgrammer
  {
    public function addLang($lang)
    {
      // իրականացում
    }
    
    public function getLangs()
    {
      // իրականացում
    }
  }
?>

iProgrammer ինտերֆեյսին անտարբեր է. սեփական մեթոդներն են դասի, թե ժառանգված. գլխավորն այն է, որ բոլոր նկարագրված մեթոդները լինեն իրականացված։

Задание 1

Պատճենեք իմ Employee դասի կոդը և iProgrammer ինտերֆեյսի կոդը։ Մի պատճենեք իմ Programmer դասի կաղապարը. առանց իմ կոդին նայելու, ինքնուրույն իրականացրեք այս դասը։