Deklaration eines Konstruktors in einem Interface in OOP in PHP
In einem Interface kann ebenfalls ein Konstruktor
einer Klasse deklariert werden. Schauen wir uns ein Beispiel an. Angenommen, wir haben uns entschieden,
eine Klasse Rectangle zu erstellen, in der
es Methoden zur Berechnung der Fläche, des Umfangs
sowie einen Konstruktor gibt, der zwei Parameter entgegennimmt.
Beschreiben wir unsere Klasse mit Hilfe eines Interfaces:
<?php
interface iRectangle
{
public function __construct($a, $b); // Konstruktor mit zwei Parametern
public function getSquare();
public function getPerimeter();
}
?>
Lassen Sie uns eine Implementierung unseres Interfaces
iRectangle schreiben:
<?php
class Rectangle implements iRectangle
{
private $a;
private $b;
public function __construct($a, $b)
{
$this->a = $a;
$this->b = $b;
}
public function getSquare()
{
return $this->a * $this->b;
}
public function getPerimeter()
{
return 2 * ($this->a + $this->b);
}
}
?>
Was hat uns die Deklaration des Konstruktors im Interface gebracht? Erstens werden wir nicht vergessen, den Konstruktor in der Klasse zu implementieren. Zweitens gibt das Interface explizit an, dass der Konstruktor der Klasse zwei Parameter entgegennehmen muss: nicht mehr und nicht weniger. Dies schützt uns ebenfalls vor versehentlichen Fehlern.
Warum haben wir ein separates Interface iRectangle erstellt,
anstatt den Konstruktor zum Interface Figure hinzuzufügen?
Weil alle Figuren eine unterschiedliche Anzahl von Seiten haben und dementsprechend eine unterschiedliche Anzahl
von Parametern im Konstruktor. Daher mussten wir
ein separates, spezifischeres Interface
genau für Rechtecke erstellen.
Erstellen Sie ein Interface iCube, das
die Figur Würfel beschreibt. Ihr Interface
soll einen Konstruktor beschreiben, der die Seitenlänge des Würfels als Parameter entgegennimmt, sowie Methoden zur Ermittlung
des Volumens des Würfels und der Oberfläche.
Erstellen Sie eine Klasse Cube, die das Interface
iCube implementiert.
Erstellen Sie ein Interface iUser, das
einen Benutzer beschreibt. Es wird angenommen, dass
der Benutzer einen Namen und ein Alter hat und diese Felder als
Parameter des Konstruktors übergeben werden. Ihr Interface
soll ebenfalls vorgeben, dass für den Benutzer
Getter (aber keine Setter) für Namen und
Alter vorhanden sein werden.
Erstellen Sie eine Klasse User, die das Interface
iUser implementiert.