Абстрактыя метады ў ААП у PHP
Абстрактныя класы таксама могуць утрымліваць абстрактныя метады. Такія метады не павінны мець рэалізацыі, а патрэбныя для таго, каб паказаць, што такія метады павінны быць у нашчадкаў. А ўласна рэалізацыя такіх метадаў - ужо задача нашчадкаў.
Для таго, каб аб'явіць метад абстрактным,
пры яго аб'яўленні варта напісаць ключавое
слова abstract.
Давайце паспрабуем на практыцы. Хай мяркуецца,
што ўсе нашчадкі класа User павінны
мець метад increaseRevenue.
Гэты метад павінен браць бягучы даход карыстальніка і павялічваць яго на некаторую велічыню, перададзеную параметрам.
Сам клас User не ведае, які менавіта
даход будзе атрымліваць нашчаднік - бо ў работніка
гэта заробная плата, а ў студэнта - стыпендыя. Таму
кожны нашчадак будзе рэалізоўваць гэты метад
па-свойму.
Сутнасць тут у тым, што абстрактны метад класа
User прымушае праграміста рэалізоўваць
гэты метад у нашчадкаў, інакш PHP выдас памылку.
Такім чынам вы, ці іншы праграміст,
які працуе з вашым кодам, ніяк не зможаце
забыцца рэалізаваць патрэбны метад
у нашчадку.
Такім чынам, давайце паспрабуем на практыцы. Дадамо
абстрактны метад increaseRevenue
у клас User:
<?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:
<?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;
}
}
?>
Праверым працу нашага класа:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Рэалізуем метад increaseRevenue і
у класе Student. Toлькі цяпер наш
метад будзе павялічваць ужо стыпендыю:
<?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;
}
}
?>
Дадайце ў ваш клас User такі ж
абстрактны метад increaseRevenue.
Напішыце рэалізацыю гэтага метада ў класах
Employee і Student.
У класе Figure зрабіце абстрактныя
метады для атрымання плошчы і перыметра фігуры.