Abstrakte klasser i OOP i PHP
Lad os sige, at du har en klasse User, og fra
den arver klassene Employee og
Student.
Samtidig forudsættes det, at du vil oprette
objekter af klassene Employee og Student,
men objekter af klassen User - vil du ikke,
da denne klasse kun bruges til
grupning af fælles egenskaber og metoder for dens
arvinger.
I dette tilfælde kan man tvingende forbyde
oprettelse af objekter af klassen User, så
du eller en anden programmør et eller andet sted ikke ved et uheld
opretter dem.
Til dette findes såkaldte abstrakte klasser. Abstrakte klasser er klasser, der er beregnet til arv fra dem. Samtidig kan man ikke oprette objekter af sådanne klasser.
For at erklære en klasse abstrakt,
skal man ved dens erklæring skrive nøgleordet
abstract:
<?php
abstract class User
{
}
?>
Så lad os skrive implementeringen af den abstrakte
klasse User. Lad den have en privat
egenskab name, samt gettere og settere
for den:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Et forsøg på at oprette et objekt af klassen User
vil forårsage en fejl:
<?php
$user = new User; // vil give en fejl
?>
Derimod vil det være muligt at arve fra vores klasse.
Lad os lave klassen Employee, som
vil arve fra vores abstrakte
klasse User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Lad os oprette et objekt af klassen Employee -
alt vil fungere:
<?php
$employee = new Employee;
$employee->setName('john'); // forældermetode, dvs. fra klassen User
$employee->setSalary(1000); // egen metode, dvs. fra klassen Employee
echo $employee->getName(); // vil udskrive 'john'
echo $employee->getSalary(); // vil udskrive 1000
?>
Lav en abstrakt klasse Figure,
der repræsenterer en geometrisk
figur. Lad klasser for
cirkel, rektangel og kvadrat arve fra den.