Абстрактни класове в ООП в PHP
Да предположим, че имате клас User, а от
него наследяват класове Employee и
Student.
Като се предполага, че ще създавате
обекти от класове Employee и Student,
но обекти от клас User - няма да създавате,
тъй като този клас се използва само за
групиране на общи свойства и методи на неговите
наследници.
В този случай можете принудително да забраните
създаването на обекти от клас User, така че
вие или друг програмист някъде случайно да не ги създадете.
За това съществуват така наречените абстрактни класове. Абстрактните класове са класове, предназначени за наследяване от тях. В този случай обекти от такива класове не могат да бъдат създавани.
За да декларирате клас като абстрактен,
трябва при неговата декларация да напиете ключовата
дума abstract:
<?php
abstract class User
{
}
?>
И така, нека напием реализация на абстрактния
клас User. Да предположим, че той има частно
свойство 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,
представляващ геометрична
фигура. Нека от него наследяват класове
за кръг, правоъгълник и квадрат.