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