Abstrakte klasse in OOP in PHP
Gestel jy het 'n klas User, en
daarvan erf die klasse Employee en
Student.
Terselfdertyd word daar veronderstel dat jy
voorwerpe van die klasse Employee en Student sal skep,
maar voorwerpe van die klas User - sal jy nie,
aangesien hierdie klas slegs gebruik word vir die
groepering van algemene eienskappe en metodes van sy
erfgename.
In hierdie geval kan jy die
skep van voorwerpe van die klas User gedwonge verbied, sodat
jy of 'n ander programmeur dit nêrens per ongeluk
skep nie.
Vir hierdie doel bestaan daar sogenaamde abstrakte klasse. Abstrakte klasse is klasse wat bedoel is vir oorerving daarvan. Terselfdertyd kan voorwerpe van sulke klasse nie geskep word nie.
Om 'n klas as abstrak te verklaar,
moet jy die sleutelwoord
abstract tydens sy verklaring skryf:
<?php
abstract class User
{
}
?>
Laat ons dus die implementering van 'n abstrakte
klas User skryf. Laat dit 'n private
eienskap name hê, sowel as getters en setters
daarvoor:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
'n Poging om 'n voorwerp van die klas User te skep
sal 'n fout veroorsaak:
<?php
$user = new User; // sal 'n fout gee
?>
Maar om van ons klas te erf sal
moonlijk wees. Laat ons 'n klas Employee maak, wat
van ons abstrakte
klas User sal erf:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Laat ons 'n voorwerp van die klas Employee skep -
alles sal werk:
<?php
$employee = new Employee;
$employee->setName('john'); // metode van ouer, d.w.s. klas User
$employee->setSalary(1000); // eie metode, d.w.s. klas Employee
echo $employee->getName(); // sal 'john' afdruk
echo $employee->getSalary(); // sal 1000 afdruk
?>
Maak 'n abstrakte klas Figure,
wat 'n geometriese
figuur voorstel. Laat die klasse
vir sirkel, reghoek en vierkant daarvan erf.