Աբստրակտ մեթոդները OOP-ում PHP-ում

Աբստրակտ դասերը կարող են պարունակել նաև աբստրակտ մեթոդներ: Նման մեթոդները չպետք է ունենան իրականացում, այլ անհրաժեշտ են նշելու համար, որ նման մեթոդներ պետք է ունենան ժառանգները: Իսկ հենց նման մեթոդների իրականացումը արդեն ժառանգների խնդիրն է:

Մեթոդը աբստրակտ հայտարարելու համար, դրա հայտարարության ժամանակ պետք է գրել abstract բանալի բառը:

Եկեք փորձենք գործնականում: Ենթադրենք, որ User դասի բոլոր ժառանգները պետք է ունենան increaseRevenue մեթոդը:

Այս մեթոդը պետք է վերցնի օգտագործողի ընթացիկ եկամուտը և ավելացնի այն որոշակի չափով, որը փոխանցվում է պարամետրով:

User դասն ինքը չգիտի, թե կոնկրետ ինչ եկամուտ կստանա ժառանգը - քանի որ աշխատողի դեպքում դա աշխատավարձ է, իսկ ուսանողի դեպքում` կրթաթոշակ: Ուստի յուրաքանչյուր ժառանգ կիրականացնի այս մեթոդը իրեն հատուկ ձևով:

Այստեղ իմաստը կայանում է նրանում, որ դասի աբստրակտ մեթոդը User ստիպում է ծրագրավորողին իրականացնել այս մեթոդը ժառանգներում, հակառակ դեպքում PHP կտա սխալ: Այսպիսով դուք, կամ ձեր կոդով աշխատող մեկ այլ ծրագրավորող, ոչ մի կերպ չի կարողանա մոռանալ իրականացնել անհրաժեշտ մեթոդը ժառանգում:

Այսպիսով, եկեք փորձենք գործնականում: Ավելացնենք increaseRevenue աբստրակտ մեթոդը User դասում:

User.php<?php
  abstract class User
  {
    private $name;
    
    public function getName()
    {
      return $this->name;
    }
    
    public function setName($name)
    {
      $this->name = $name;
    }
    
    // Աբստրակտ մեթոդ առանց մարմնի:
    abstract public function increaseRevenue($value);
  }
?>

Ենթադրենք, մեր Employee դասը մնում է անփոփոխ: Այս դեպքում, նույնիսկ եթե չստեղծվեն Employee դասի օբյեկտներ, բայց պարզապես գործարկվի կոդը, որում սահմանվում են մեր դասերը, - PHP կտա սխալ:

Հիմա գրենք increaseRevenue մեթոդի իրականացումը Employee դասում:

Employee.php<?php
  class Employee extends User
  {
    private $salary;
    
    public function getSalary()
    {
      return $this->salary;
    }
    
    public function setSalary($salary)
    {
      $this->salary = $salary;
    }
    
    // Գրենք մեթոդի իրականացումը:
    public function increaseRevenue($value)
    {
      $this->salary = $this->salary + $value;
    }
  }
?>

Ստուգենք մեր դասի աշխատանքը:

index.php<?php
  $employee = new Employee;
  $employee->setName('john');
  $employee->setSalary(1000);
  $employee->increaseRevenue(100);
  
  echo $employee->getSalary();
?>

Իրականացնենք increaseRevenue մեթոդը նաև Student դասում: Միայն այս անգամ մեր մեթոդը կավելացնի արդեն կրթաթոշակը:

Student.php<?php
  class Student extends User
  {
    private $scholarship; // կրթաթոշակ
    
    public function getScholarship()
    {
      return $this->scholarship;
    }
    
    public function setScholarship($scholarship)
    {
      $this->scholarship = $scholarship;
    }
    
    // Մեթոդը մեծացնում է կրթաթոշակը:
    public function increaseRevenue($value)
    {
      $this->scholarship = $this->scholarship + $value;
    }
  }
?>
Задание 1

Ավելացրեք ձեր User դասին նույն increaseRevenue աբստրակտ մեթոդը: Գրեք այս մեթոդի իրականացումը Employee և Student դասերում:

Задание 2

Figure դասում ստեղծեք աբստրակտ մեթոդներ նկարի մակերեսը և պարագիծը ստանալու համար: