Abstrakte Klassen in OOP in PHP
Angenommen, Sie haben eine Klasse User, und davon
erben die Klassen Employee und
Student.
Dabei wird angenommen, dass Sie Objekte
der Klassen Employee und Student erstellen werden,
aber Objekte der Klasse User - nicht,
da diese Klasse nur zur Gruppierung gemeinsamer
Eigenschaften und Methoden ihrer Nachkommen
verwendet wird.
In diesem Fall kann die Erstellung von Objekten
der Klasse User zwangsweise verboten werden,
damit Sie oder ein anderer Programmierer sie nicht
versehentlich irgendwo erstellen.
Dafür gibt es sogenannte abstrakte Klassen. Abstrakte Klassen sind Klassen, die für die Vererbung von ihnen bestimmt sind. Dabei können Objekte solcher Klassen nicht erstellt werden.
Um eine Klasse als abstrakt zu deklarieren,
muss beim Deklarieren das Schlüsselwort
abstract geschrieben werden:
<?php
abstract class User
{
}
?>
Also, lassen Sie uns die Implementierung einer abstrakten
Klasse User schreiben. Angenommen, sie hat eine private
Eigenschaft name, sowie Getter und Setter
dafür:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Der Versuch, ein Objekt der Klasse User zu erstellen,
wird einen Fehler verursachen:
<?php
$user = new User; // wird einen Fehler ausgeben
?>
Aber die Vererbung von unserer Klasse wird
möglich sein. Erstellen wir eine Klasse Employee, die
von unserer abstrakten Klasse User erbt:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Erstellen wir ein Objekt der Klasse Employee -
alles wird funktionieren:
<?php
$employee = new Employee;
$employee->setName('john'); // Methode des Elternteils, d.h. der Klasse User
$employee->setSalary(1000); // eigene Methode, d.h. der Klasse Employee
echo $employee->getName(); // gibt 'john' aus
echo $employee->getSalary(); // gibt 1000 aus
?>
Erstellen Sie eine abstrakte Klasse Figure,
die eine geometrische Figur darstellt.
Angenommen, davon erben Klassen
für Kreis, Rechteck und Quadrat.