Abstraktni razredi v OOP v PHP
Recimo, da imate razred User, od
katerega pa dedujeta razreda Employee in
Student.
Pri tem se predvideva, da boste ustvarjali
objekte razredov Employee in Student,
objektov razreda User pa ne,
saj se ta razred uporablja samo za
združevanje skupnih lastnosti in metod svojih
naslednikov.
V tem primeru lahko prisilno prepoveste
ustvarjanje objektov razreda User, da
vi ali drug programer kje slučajno ne
ustvarite njih.
Za to obstajajo tako imenovani abstraktni razredi. Abstraktni razredi so razredi, namenjeni dedovanju od njih. Objektov takšnih razredov ni mogoče ustvariti.
Če želite razred razglasiti za abstraktnega,
morate pri njegovi deklaraciji napisati ključno
besedo abstract:
<?php
abstract class User
{
}
?>
Torej, napišimo implementacijo abstraktnega
razreda User. Naj ima zasebno
lastnost name, ter getterje in setterje
zanj:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Poskus ustvarjanja objekta razreda User
bo povzročil napako:
<?php
$user = new User; // bo izpisalo napako
?>
Od našega razreda pa bo lahko
dedovali. Naredimo razred Employee, ki
bo dedoval od našega abstraktnega
razreda User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Ustvarimo objekt razreda Employee -
vse bo delovalo:
<?php
$employee = new Employee;
$employee->setName('john'); // metoda starša, tj. razreda User
$employee->setSalary(1000); // lastna metoda, tj. razreda Employee
echo $employee->getName(); // bo izpisalo 'john'
echo $employee->getSalary(); // bo izpisalo 1000
?>
Naredite abstraktni razred Figure,
ki predstavlja geometrijsko
figuro. Naj od njega dedujejo razredi
za krog, pravokotnik in kvadrat.