Апстрактне методе у ООП у 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. Само ће сада наша
метода увећавати већ стипендију:
<?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 направите апстрактне
методе за добијање површине и периметра фигуре.