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

Ենթադրենք՝ ունեք User դաս, և դրանից ժառանգում են Employee և Student դասերը:

Ընդ որում, ենթադրվում է, որ դուք կստեղծեք Employee և Student դասերի օբյեկտներ, բայց User դասի օբյեկտներ՝ ոչ, քանի որ այս դասն օգտագործվում է միայն իր ժառանգների ընդհանուր հատկություններն ու մեթոդները խմբավորելու համար:

Այս դեպքում կարելի է ստիպողականորեն արգելել User դասի օբյեկտների ստեղծումը, որպեսզի դուք կամ մեկ այլ ծրագրավորող ինչ-որ տեղ դրանք պատահականաբար չստեղծեք:

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

Որպեսզի դասը հայտարարվի որպես աբստրակտ, անհրաժեշտ է դրա հայտարարման ժամանակ գրել abstract բանալի բառը:

User.php<?php
  abstract class User
  {
    
  }
?>

Այսպիսով, եկեք գրենք User աբստրակտ դասի իրականացումը: Ենթադրենք, որ այն կունենա private name հատկություն, ինչպես նաև դրա համար գետտերներ և սետտերներ:

User.php<?php
  abstract class User
  {
    private $name;
    
    public function getName()
    {
      return $this->name;
    }
    
    public function setName($name)
    {
      $this->name = $name;
    }
  }
?>

User դասի օբյեկտ ստեղծելու փորձը կառաջացնի սխալ:

index.php<?php
  $user = new User; // կտա սխալ
?>

Սակայն մեր դասից ժառանգելը հնարավոր կլինի: Ստեղծենք Employee դասը, որն կժառանգի մեր աբստրակտ դասից User:

Employee.php<?php
  class Employee extends User
  {
    private $salary;
    
    public function getSalary()
    {
      return $this->salary;
    }
    
    public function setSalary($salary)
    {
      $this->salary = $salary;
    }
    
  }
?>

Ստեղծենք Employee դասի օբյեկտ - ամեն ինչ կաշխատի:

index.php<?php
  $employee = new Employee;
  $employee->setName('john');  // ծնողի մեթոդը, այսինքն՝ User դասի
  $employee->setSalary(1000);  // սեփական մեթոդը, այսինքն՝ Employee դասի
  
  echo $employee->getName();   // կտպի 'john'
  echo $employee->getSalary(); // կտպի 1000
?>
Задание 1

Ստեղծեք աբստրակտ դաս Figure, որը ներկայացնում է երկրաչափական ֆիգուր: Ենթադրենք, որ դրանից ժառանգում են շրջանի, ուղղանկյան և քառակուսու դասերը: