Deklarisanje konstruktora u interfejsu u OOP u PHP-u
U interfejsu se takođe može deklarisati konstruktor
klase. Pogledajmo na primeru. Pretpostavimo da smo odlučili da
napravimo klasu Rectangle, u kojoj će
biti metode za pronalaženje površine, obima,
kao i konstruktor koji prihvata dva parametra.
Hajde da opišemo našu klasu pomoću interfejsa:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktor sa dva parametra
public function getSquare();
public function getPerimeter();
}
?>
Hajde da napišemo implementaciju našeg interfejsa
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);
}
}
?>
Šta nam je dato deklarisanjem konstruktora u interfejsu? Kao prvo, nećemo zaboraviti da implementiramo konstruktor u klasi. Kao drugo, interfejs eksplicitno ukazuje, da konstruktor klase treba da prihvati dva parametra: ni više, ni manje. Ovo takođe će nas zaštititi od slučajne greške.
Zašto smo kreirali poseban interfejs iRectangle,
a nismo dodali konstruktor u interfejs Figure?
Zato što sve figure imaju različiti broj
stranica i, shodno tome, različiti broj
parametara u konstruktoru. Zato smo morali da
kreiramo poseban, precizniji interfejs
konkretno za pravougaonike.
Napravite interfejs iCube, koji
će opisivati figuru Kocka. Neka vaš interfejs
opisuje konstruktor, koji kao parametar prima
stranu kocke, kao i metode za dobijanje
zapremine kocke i površine.
Napravite klasu Cube, koja implementira interfejs
iCube.
Napravite interfejs iUser, koji
će opisivati korisnika. Pretpostavlja se da
korisnik ima ime i godine i da će ova polja biti
prosledjena parametrima konstruktora. Neka
vaš interfejs takođe zadaje to da korisnik
ima getere (ali ne i setere) za ime i
godine.
Napravite klasu User, koja implementira interfejs
iUser.