Abstracte klassen in OOP in PHP
Stel dat je een klasse User hebt, en daarvan
erven de klassen Employee en
Student.
Tegelijkertijd wordt aangenomen dat je
objecten van de klassen Employee en Student zult aanmaken,
maar objecten van de klasse User - niet,
omdat deze klasse alleen gebruikt wordt voor
het groeperen van gemeenschappelijke eigenschappen en methodes van zijn
erfgenamen.
In dit geval kan het aanmaken van
objecten van de klasse User geforceerd verboden worden, zodat
jij of een andere programmeur ze niet per ongeluk
ergens aanmaken.
Hiervoor bestaan zogenaamde abstracte klassen. Abstracte klassen zijn klassen die bedoeld zijn voor overerving ervan. Tegelijkertijd kunnen van dergelijke klassen geen objecten aangemaakt worden.
Om een klasse abstract te declareren,
moet je bij de declaratie het sleutelwoord
abstract schrijven:
<?php
abstract class User
{
}
?>
Laten we dus de implementatie van een abstracte
klasse User schrijven. Stel dat deze een private
eigenschap name heeft, en ook getters en setters
ervoor:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Een poging om een object van de klasse User te maken
zal een fout veroorzaken:
<?php
$user = new User; // geeft een foutmelding
?>
Maar erven van onze klasse zal
wel mogelijk zijn. Laten we een klasse Employee maken, die
erft van onze abstracte
klasse User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Laten we een object van de klasse Employee aanmaken -
alles zal werken:
<?php
$employee = new Employee;
$employee->setName('john'); // methode van de ouder, d.w.z. klasse User
$employee->setSalary(1000); // eigen methode, d.w.z. klasse Employee
echo $employee->getName(); // toont 'john'
echo $employee->getSalary(); // toont 1000
?>
Maak een abstracte klasse Figure,
die een geometrische
figuur voorstelt. Laat daarvan klassen
voor cirkel, rechthoek en vierkant erven.