Апстрактне класе у ООП у 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,
која представља геометријску
фигуру. Нека од ње наслеђују класе
за круг, правоугаоник и квадрат.