Deklarácia konštruktora v rozhraní v OOP v PHP

V rozhraní je možné deklarovať aj konštruktor triedy. Pozrime sa na príklad. Povedzme, že sme sa rozhodli vytvoriť triedu Rectangle, v ktorej budú metódy na výpočet plochy, obvodu, ako aj konštruktor, ktorý prijíma dva parametre. Opíšme našu triedu pomocou rozhrania:

iRectangle.php<?php
  interface iRectangle
  {
    public function __construct($a, $b); // konštruktor s dvoma parametrami
    public function getSquare();
    public function getPerimeter();
  }
?>

Napíšme implementáciu nášho rozhrania 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);
    }
  }
?>

Čo nám poskytla deklarácia konštruktora v rozhraní? Po prvé, nezabudneme implementovať konštruktor v triede. Po druhé, rozhranie explicitne určuje, že konštruktor triedy musí prijímať dva parametre: nie viac, nie menej. Toto nás tiež chráni pred náhodnou chybou.

Prečo sme vytvorili samostatné rozhranie iRectangle, a nepridali sme konštruktor do rozhrania Figure? Pretože všetky obrazce majú rôzny počet strán a teda aj rôzny počet parametrov v konštruktore. Preto sme museli vytvoriť samostatné, konkrétnejšie rozhranie špecificky pre obdĺžniky.

Задание 1

Vytvorte rozhranie iCube, ktoré bude popisovať obrazec Kocka. Nech vaše rozhranie popisuje konštruktor, ktorý ako parameter prijíma stranu kocky, ako aj metódy na získanie objemu kocky a plochy povrchu.

Задание 2

Vytvorte triedu Cube, ktorá implementuje rozhranie iCube.

Задание 3

Vytvorte rozhranie iUser, ktoré bude popisovať používateľa. Predpokladá sa, že používateľ bude mať meno a vek a tieto polia budú odovzdané ako parametre konštruktora. Nech vaše rozhranie tiež určuje, že používateľ bude mať gettery (ale nie settery) pre meno a vek.

Задание 4

Vytvorte triedu User, ktorá implementuje rozhranie iUser.