Konstruktorin määrittely rajapinnassa OOP:ssa PHP:ssä
Rajapinnassa voidaan myös määritellä luokan
konstruktori. Katsotaan esimerkkiä. Oletetaan,
että päätimme tehdä luokan Rectangle, jossa
on menetelmät pinta-alan ja kehän löytämiseksi,
sekä konstruktori, joka ottaa kaksi parametria.
Kuvataan luokkamme rajapinnan avulla:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktori kahdella parametrilla
public function getSquare();
public function getPerimeter();
}
?>
Kirjoitetaan rajapintamme iRectangle
toteutus:
<?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);
}
}
?>
Mitä konstruktorin määrittely rajapinnassa antoi meille? Ensinnäkin, emme unohda toteuttaa konstruktoria luokassa. Toiseksi, rajapinta osoittaa nimenomaisesti, että luokan konstruktorin on otettava vastaan kaksi parametria: ei enempää eikä vähempää. Tämä myös suojaa meitä vahingollisilta virheiltä.
Miksi loimme erillisen rajapinnan iRectangle,
emmekä lisänneet konstruktoria rajapintaan Figure?
Koska kaikilla kuvioilla on eri määrä
sivuja ja vastaavasti eri määrä
parametreja konstruktorissa. Siksi meidän piti
luoda erillinen, tarkempi rajapinta
nimenomaan suorakulmioille.
Tee rajapinta iCube, joka
kuvailee Kuution muotoa. Olkoon rajapintasi
kuvailemassa konstruktoria, joka parametrina ottaa
kuution sivun, sekä menetelmiä kuution
tilavuuden ja pinta-alan saamiseksi.
Tee luokka Cube, joka toteuttaa rajapinnan
iCube.
Tee rajapinta iUser, joka
kuvailee käyttäjää. Oletetaan, että
käyttäjällä on nimi ja ikä ja nämä kentät
annetaan konstruktorin parametreina. Olkoon
rajapintasi määrittelemässä myös sen, että
käyttäjälle tehdään getterit (mutta ei settereitä) nimelle ja
iälle.
Tee luokka User, joka toteuttaa rajapinnan
iUser.