Apstraktne klase u OOP u PHP
Pretpostavimo da imate klasu User, a od
nje nasleđuju klase Employee i
Student.
Pri tome se pretpostavlja da ćete kreirati
objekte klasa Employee i Student,
ali objekte klase User - nećete,
pošto se ova klasa koristi samo za
grupisanje opštih svojstava i metoda svojih
naslednika.
U ovom slučaju možemo prinudno zabraniti
kreiranje objekata klase User, kako
vi ili drugi programer negde slučajno
ne biste ih kreirali.
Za ovo postoje takozvane apstraktne klase. Apstraktne klase predstavljaju klase namenjene nasleđivanju od njih. Pri tome objekte takvih klasa ne možemo kreirati.
Da bismo deklarisali klasu kao apstraktnu,
potrebno je prilikom njene deklaracije napisati ključnu
reč abstract:
<?php
abstract class User
{
}
?>
Dakle, hajde da napišemo implementaciju apstraktne
klase User. Neka ima privatno
svojstvo name, kao i getere i setere
za njega:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Pokušaj kreiranja objekta klase User
će izazvati grešku:
<?php
$user = new User; // izbaciće grešku
?>
A nasleđivanje od naše klase će
biti moguće. Napravimo klasu Employee, koja
će nasleđivati od naše apstraktne
klase User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Kreirajmo objekat klase Employee -
sve će raditi:
<?php
$employee = new Employee;
$employee->setName('john'); // metod roditelja, tj. klase User
$employee->setSalary(1000); // sopstveni metod, tj. klase Employee
echo $employee->getName(); // ispisaće 'john'
echo $employee->getSalary(); // ispisaće 1000
?>
Napravite apstraktnu klasu Figure,
koja predstavlja geometrijsku
figuru. Neka od nje nasleđuju klase
za krug, pravougaonik i kvadrat.