Abstraktní třídy v OOP v PHP
Předpokládejme, že máte třídu User, od které
dědí třídy Employee a
Student.
Přičemž se předpokládá, že budete vytvářet
objekty tříd Employee a Student,
ale objekty třídy User - nebudete,
protože tato třída se používá pouze pro
seskupování společných vlastností a metod svých
dědiců.
V tomto případě lze násilně zakázat
vytvářet objekty třídy User, aby
vy nebo jiný programátor někde náhodou
nevytvořili.
Pro toto existují takzvané abstraktní třídy. Abstraktní třídy představují třídy, určené pro dědění od nich. Přitom objekty takových tříd nelze vytvořit.
Pro to, aby byla třída deklarována jako abstraktní,
je třeba při její deklaraci napsat klíčové
slovo abstract:
<?php
abstract class User
{
}
?>
Takže, pojďme napsat implementaci abstraktní
třídy User. Předpokládejme, že bude mít privátní
vlastnost name, a také gettery a settery
pro ni:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Pokus o vytvoření objektu třídy User
vyvolá chybu:
<?php
$user = new User; // vypíše chybu
?>
Ale dědit od naší třídy bude
možné. Vytvořme třídu Employee, která
bude dědit od naší abstraktní
třídy User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Vytvořme objekt třídy Employee -
vše bude fungovat:
<?php
$employee = new Employee;
$employee->setName('john'); // metoda rodiče, tj. třídy User
$employee->setSalary(1000); // vlastní metoda, tj. třídy Employee
echo $employee->getName(); // vypíše 'john'
echo $employee->getSalary(); // vypíše 1000
?>
Vytvořte abstraktní třídu Figure,
představující geometrický
tvar. Ať od ní dědí třídy
pro kruh, obdélník a čtverec.