Декларација конструктора у интерфејсу у ООП у 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.