Деклариране на конструктор в интерфейс в ООП в PHP
В интерфейс може също да се декларира конструктор
на клас. Нека разгледаме с пример. Да речем, че сме решили
да създадем клас Rectangle, в който
ще има методи за намиране на площ, периметър,
както и конструктор, приемащ два параметъра.
Нека опишем нашия клас с помощта на интерфейс:
<?php
interface iRectangle
{
public function __construct($a, $b); // конструктор с два параметъра
public function getSquare();
public function getPerimeter();
}
?>
Нека напишем имплементация на нашия интерфейс
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);
}
}
?>
Какво ни даде декларирането на конструктор в интерфейса? Първо, няма да забравим да имплементираме конструктора в класа. Второ, интерфейсът изрично показва, че конструкторът на класа трябва да приема два параметъра: нито повече, нито по-малко. Това също ни предпазва от случайна грешка.
Защо създадохме отделен интерфейс iRectangle,
вместо да добавим конструктора в интерфейса Figure?
Защото всички фигури имат различен брой
страни и съответно различен брой
параметри в конструктора. Затова трябваше да
създадем отделен, по-точен интерфейс
конкретно за правоъгълници.
Създайте интерфейс iCube, който
ще описва фигурата Куб. Нека вашият интерфейс
да описва конструктор, приемащ като параметър
страната на куба, както и методи за получаване
на обема на куба и площта на повърхнината.
Създайте клас Cube, имплементиращ интерфейса
iCube.
Създайте интерфейс iUser, който
ще описва потребител. Предполага се, че
потребителят ще има име и възраст и тези полета ще
се подават като параметри на конструктора. Нека
вашият интерфейс също да указва, че потребителят
ще има гетъри (но не и сетъри) за името и
възрастта.
Създайте клас User, имплементиращ интерфейса
iUser.