Abstrakte klasser i OOP i PHP
La oss si at du har en klasse User, og at
den arves av klassene Employee og
Student.
Samtidig forutsettes det at du vil opprette
objekter av klassene Employee og Student,
men objekter av klassen User - vil du ikke,
siden denne klassen bare brukes for å
gruppere felles egenskaper og metoder for sine
arvinger.
I dette tilfellet kan man tvingende forby
opprettelse av objekter av klassen User, slik at
du eller en annen programmerer et sted ikke ved et uhell
skulle opprette dem.
For dette finnes det såkalte abstrakte klasser. Abstrakte klasser er klasser som er beregnet på arving fra dem. Samtidig kan man ikke opprette objekter av slike klasser.
For å deklarere en klasse som abstrakt,
må man skrive nøkkelordet abstract
ved deklarasjonen:
<?php
abstract class User
{
}
?>
Så, la oss skrive implementasjonen av en abstrakt
klasse User. La den ha en privat
egenskap 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øk på å opprette et objekt av klassen User
vil forårsake en feil:
<?php
$user = new User; // vil gi en feil
?>
Derimot vil det være mulig å arve fra klassen vår.
La oss lage en klasse Employee som
arver fra vår abstrakte
klasse User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
La oss opprette et objekt av klassen Employee -
alt vil fungere:
<?php
$employee = new Employee;
$employee->setName('john'); // forelderens metode, dvs. klassen User
$employee->setSalary(1000); // egen metode, dvs. klassen Employee
echo $employee->getName(); // vil skrive ut 'john'
echo $employee->getSalary(); // vil skrive ut 1000
?>
Lag en abstrakt klasse Figure,
som representerer en geometrisk
figur. La klasser for sirkel,
rektangel og kvadrat arve fra den.