Абстрактыя класы ў ААП у 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
,
які ўяўляе сабой геаметрычную
фігуру. Хай ад яго наследуе класы
для круга, прамавугольніка і квадрата.