Abstrakta klasser i OOP i PHP
Låt oss säga att du har en klass User, och från
den ärver klasserna Employee och
Student.
Samtidigt antas det att du kommer att skapa
objekt av klasserna Employee och Student,
men objekt av klassen User - kommer du inte,
eftersom denna klass endast används för
gruppering av gemensamma egenskaper och metoder för sina
ärvlingar.
I detta fall kan man med kraft förbjuda
skapandet av objekt av klassen User, så att
du eller en annan programmerare någonstans av misstag
inte skapar dem.
För detta finns så kallade abstrakta klasser. Abstrakta klasser är klasser avsedda för arv från dem. Samtidigt går det inte att skapa objekt av sådana klasser.
För att deklarera en klass som abstrakt
behöver man vid dess deklaration skriva nyckelordet
abstract:
<?php
abstract class User
{
}
?>
Så, låt oss skriva implementationen av den abstrakta
klassen User. Låt den ha en privat
egenskap name, samt getters och setters
för den:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Ett försök att skapa ett objekt av klassen User
kommer att orsaka ett fel:
<?php
$user = new User; // kommer att ge ett fel
?>
Däremot kommer det att gå att ärva från vår klass.
Låt oss skapa klassen Employee, som
kommer att ärva från vår abstrakta
klass User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Låt oss skapa ett objekt av klassen Employee -
allt kommer att fungera:
<?php
$employee = new Employee;
$employee->setName('john'); // föräldermetod, dvs. klassen User
$employee->setSalary(1000); // egen metod, dvs. klassen Employee
echo $employee->getName(); // kommer att skriva ut 'john'
echo $employee->getSalary(); // kommer att skriva ut 1000
?>
Skapa en abstrakt klass Figure,
som representerar en geometrisk
figur. Låt klasser för cirkel, rektangel och kvadrat ärva från den.