Deklaration av konstruktor i gränssnitt i OOP i PHP
I ett gränssnitt kan man också deklarera en konstruktor
för klassen. Låt oss titta på ett exempel. Låt oss säga att vi bestämde oss för
att skapa en klass Rectangle, där
det kommer att finnas metoder för att hitta area, omkrets,
samt en konstruktor som tar två parametrar.
Låt oss beskriva vår klass med hjälp av ett gränssnitt:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktor med två parametrar
public function getSquare();
public function getPerimeter();
}
?>
Låt oss skriva en implementation av vårt gränssnitt
iRectangle:
<?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);
}
}
?>
Vad gav oss deklarationen av konstruktorn i gränssnittet? För det första kommer vi inte att glömma att implementera konstruktorn i klassen. För det andra indikerar gränssnittet explicit att klassens konstruktor måste ta två parametrar: varken fler eller färre. Detta skyddar oss också från ett misstag.
Varför skapade vi ett separat gränssnitt iRectangle,
istället för att lägga till konstruktorn i gränssnittet Figure?
Eftersom alla figurer har ett annat antal
sidor och följaktligen ett annat antal
parametrar i konstruktorn. Därför var vi tvungna
att skapa ett separat, mer exakt gränssnitt
specifikt för rektanglar.
Skapa ett gränssnitt iCube, som
kommer att beskriva figuren Kub. Låt ditt gränssnitt
beskriva en konstruktor, som tar kubens sida som parameter, samt metoder för att få
kubens volym och ytarea.
Skapa en klass Cube, som implementerar gränssnittet
iCube.
Skapa ett gränssnitt iUser, som
kommer att beskriva en användare. Det antas att
användaren har ett namn och en ålder och att dessa fält kommer att
skickas som parametrar till konstruktorn. Låt
ditt gränssnitt också specificera att användaren
kommer att ha getters (men inte setters) för namn och
ålder.
Skapa en klass User, som implementerar gränssnittet
iUser.