Deklarace konstruktoru v rozhraní v OOP v PHP

V rozhraní lze také deklarovat konstruktor třídy. Podívejme se na příklad. Předpokládejme, že jsme se rozhodli vytvořit třídu Rectangle, která bude mít metody pro výpočet plochy, obvodu, a také konstruktor přijímající dva parametry. Pojďme popsat naši třídu pomocí rozhraní:

iRectangle.php<?php
  interface iRectangle
  {
    public function __construct($a, $b); // konstruktor se dvěma parametry
    public function getSquare();
    public function getPerimeter();
  }
?>

Pojďme napsat implementaci našeho rozhraní 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);
    }
  }
?>

Co nám přinesla deklarace konstruktoru v rozhraní? Zaprvé, nezapomeneme implementovat konstruktor v třídě. Zadruhé, rozhraní explicitně určuje, že konstruktor třídy musí přijímat dva parametry: ani více, ani méně. To nás také ochrání před náhodnou chybou.

Proč jsme vytvořili samostatné rozhraní iRectangle, a nepřidali konstruktor do rozhraní Figure? Protože všechny obrazce mají různý počet stran a tedy i různý počet parametrů v konstruktoru. Proto jsme museli vytvořit samostatné, přesnější rozhraní konkrétně pro obdélníky.

Задание 1

Vytvořte rozhraní iCube, které bude popisovat obrazec Krychle. Nechť vaše rozhraní popisuje konstruktor, který jako parametr přijímá stranu krychle, a také metody pro získání objemu krychle a plochy povrchu.

Задание 2

Vytvořte třídu Cube, která implementuje rozhraní iCube.

Задание 3

Vytvořte rozhraní iUser, které bude popisovat uživatele. Předpokládá se, že uživatel bude mít jméno a věk a tato pole budou předána parametry konstruktoru. Nechť vaše rozhraní také určuje, že uživatel bude mít gettery (ale ne settery) pro jméno a věk.

Задание 4

Vytvořte třídu User, která implementuje rozhraní iUser.