Classi astratte in OOP in PHP
Supponiamo che tu abbia una classe User, e da
essa ereditino le classi Employee e
Student.
In questo caso, si presuppone che creerai
oggetti delle classi Employee e Student,
ma non creerai oggetti della classe User,
poiché questa classe viene utilizzata solo per
raggruppare proprietà e metodi comuni dei suoi
eredi.
In questo caso, è possibile vietare forzatamente
la creazione di oggetti della classe User, in modo che
tu o un altro programmatore non ne crei accidentalmente
da qualche parte.
Per questo esistono le cosiddette classi astratte. Le classi astratte sono classi destinate all'ereditarietà da esse. Tuttavia, non è possibile creare oggetti di tali classi.
Per dichiarare una classe astratta,
è necessario scrivere la parola chiave
abstract nella sua dichiarazione:
<?php
abstract class User
{
}
?>
Quindi, scriviamo l'implementazione di una classe
astratta User. Supponiamo che abbia una proprietà
privata name, e anche getter e setter
per essa:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Il tentativo di creare un oggetto della classe User
causerà un errore:
<?php
$user = new User; // darà un errore
?>
Tuttavia, sarà possibile ereditare dalla nostra classe.
Creiamo una classe Employee che
erediti dalla nostra classe astratta
User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Creiamo un oggetto della classe Employee -
tutto funzionerà:
<?php
$employee = new Employee;
$employee->setName('john'); // metodo del genitore, cioè della classe User
$employee->setSalary(1000); // metodo proprio, cioè della classe Employee
echo $employee->getName(); // visualizzerà 'john'
echo $employee->getSalary(); // visualizzerà 1000
?>
Crea una classe astratta Figure,
che rappresenti una figura geometrica.
Lascia che da essa ereditino classi
per il cerchio, il rettangolo e il quadrato.