Աբստրակտ դասերը OOP-ում PHP-ում
Ենթադրենք՝ ունեք User դաս, և
դրանից ժառանգում են Employee և
Student դասերը:
Ընդ որում, ենթադրվում է, որ դուք կստեղծեք
Employee և Student դասերի օբյեկտներ,
բայց User դասի օբյեկտներ՝ ոչ,
քանի որ այս դասն օգտագործվում է միայն իր
ժառանգների ընդհանուր հատկություններն ու մեթոդները
խմբավորելու համար:
Այս դեպքում կարելի է ստիպողականորեն արգելել
User դասի օբյեկտների ստեղծումը, որպեսզի
դուք կամ մեկ այլ ծրագրավորող ինչ-որ տեղ դրանք պատահականաբար
չստեղծեք:
Դրա համար գոյություն ունեն այսպես կոչված աբստրակտ դասեր: Աբստրակտ դասերը դասեր են, որոնք նախատեսված են դրանցից ժառանգելու համար: Ընդ որում, այդպիսի դասերի օբյեկտներ չի կարելի ստեղծել:
Որպեսզի դասը հայտարարվի որպես աբստրակտ,
անհրաժեշտ է դրա հայտարարման ժամանակ գրել abstract
բանալի բառը:
<?php
abstract class User
{
}
?>
Այսպիսով, եկեք գրենք User աբստրակտ
դասի իրականացումը: Ենթադրենք, որ այն կունենա private
name հատկություն, ինչպես նաև դրա համար գետտերներ և սետտերներ:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
User դասի օբյեկտ ստեղծելու փորձը
կառաջացնի սխալ:
<?php
$user = new User; // կտա սխալ
?>
Սակայն մեր դասից ժառանգելը
հնարավոր կլինի: Ստեղծենք Employee դասը, որն
կժառանգի մեր աբստրակտ
դասից User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Ստեղծենք Employee դասի օբյեկտ -
ամեն ինչ կաշխատի:
<?php
$employee = new Employee;
$employee->setName('john'); // ծնողի մեթոդը, այսինքն՝ User դասի
$employee->setSalary(1000); // սեփական մեթոդը, այսինքն՝ Employee դասի
echo $employee->getName(); // կտպի 'john'
echo $employee->getSalary(); // կտպի 1000
?>
Ստեղծեք աբստրակտ դաս Figure,
որը ներկայացնում է երկրաչափական
ֆիգուր: Ենթադրենք, որ դրանից ժառանգում են շրջանի,
ուղղանկյան և քառակուսու դասերը: