Declararea constructorului în interfață în OOP în PHP
În interfață se poate declara și constructorul
clasei. Să vedem un exemplu. Să presupunem că am decis
să creăm clasa Rectangle, care va conține
metode pentru găsirea ariei, perimetrului,
precum și un constructor care primește doi parametri.
Să descriem clasa noastră cu ajutorul unei interfețe:
<?php
interface iRectangle
{
public function __construct($a, $b); // constructor cu doi parametri
public function getSquare();
public function getPerimeter();
}
?>
Să scriem implementarea interfeței noastre
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);
}
}
?>
Ce ne-a oferit declararea constructorului în interfață? În primul rând, nu vom uita să implementăm constructorul în clasă. În al doilea rând, interfața indică în mod explicit că constructorul clasei trebuie să primească doi parametri: nici mai mult, nici mai puțin. Acest lucru ne protejează și de erori accidentale.
De ce am creat o interfață separată iRectangle,
și nu am adăugat constructorul în interfața Figure?
Pentru că toate figurile au un număr diferit de
laturi și, în consecință, un număr diferit de
parametri în constructor. De aceea a trebuit
să creăm o interfață separată, mai precisă
special pentru dreptunghiuri.
Creați o interfață iCube, care
să descrie figura Cub. Lăsați interfața voastră
să descrie un constructor care primește ca parametru
latura cubului, precum și metode pentru obținerea
volumului cubului și a suprafeței.
Creați o clasă Cube, care implementează interfața
iCube.
Creați o interfață iUser, care
să descrie un utilizator. Se presupune că
utilizatorul are un nume și o vârstă și aceste câmpuri vor fi
transmise ca parametri ai constructorului. Lăsați
interfața voastră să specifice, de asemenea, că utilizatorul
va avea gettere (dar nu settere) pentru nume și
vârstă.
Creați o clasă User, care implementează interfața
iUser.