Деклариране на конструктор в интерфейс в ООП в PHP

В интерфейс може също да се декларира конструктор на клас. Нека разгледаме с пример. Да речем, че сме решили да създадем клас Rectangle, в който ще има методи за намиране на площ, периметър, както и конструктор, приемащ два параметъра. Нека опишем нашия клас с помощта на интерфейс:

iRectangle.php<?php
  interface iRectangle
  {
    public function __construct($a, $b); // конструктор с два параметъра
    public function getSquare();
    public function getPerimeter();
  }
?>

Нека напишем имплементация на нашия интерфейс iRectangle:

Rectangle.php<?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? Защото всички фигури имат различен брой страни и съответно различен брой параметри в конструктора. Затова трябваше да създадем отделен, по-точен интерфейс конкретно за правоъгълници.

Задание 1

Създайте интерфейс iCube, който ще описва фигурата Куб. Нека вашият интерфейс да описва конструктор, приемащ като параметър страната на куба, както и методи за получаване на обема на куба и площта на повърхнината.

Задание 2

Създайте клас Cube, имплементиращ интерфейса iCube.

Задание 3

Създайте интерфейс iUser, който ще описва потребител. Предполага се, че потребителят ще има име и възраст и тези полета ще се подават като параметри на конструктора. Нека вашият интерфейс също да указва, че потребителят ще има гетъри (но не и сетъри) за името и възрастта.

Задание 4

Създайте клас User, имплементиращ интерфейса iUser.