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:

iRectangle.php<?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:

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);
    }
  }
?>

Š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.

Задание 1

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.

Задание 2

Napravite klasu Cube, koja implementira interfejs iCube.

Задание 3

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.

Задание 4

Napravite klasu User, koja implementira interfejs iUser.