Deklaracja konstruktora w interfejsie w OOP w PHP

W interfejsie również można zadeklarować konstruktor klasy. Spójrzmy na przykład. Załóżmy, że postanowiliśmy utworzyć klasę Rectangle, w której będą metody do znajdowania pola powierzchni, obwodu, a także konstruktor przyjmujący dwa parametry. Opiszmy naszą klasę za pomocą interfejsu:

iRectangle.php<?php
  interface iRectangle
  {
    public function __construct($a, $b); // konstruktor z dwoma parametrami
    public function getSquare();
    public function getPerimeter();
  }
?>

Napiszmy implementację naszego interfejsu 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 dało nam zadeklarowanie konstruktora w interfejsie? Po pierwsze, nie zapomnimy zaimplementować konstruktora w klasie. Po drugie, interfejs wyraźnie wskazuje, że konstruktor klasy musi przyjmować dwa parametry: ani więcej, ani mniej. To również zabezpieczy nas przed przypadkowym błędem.

Dlaczego utworzyliśmy osobny interfejs iRectangle, a nie dodaliśmy konstruktora do interfejsu Figure? Ponieważ wszystkie figury mają różną liczbę boków i, odpowiednio, różną liczbę parametrów w konstruktorze. Dlatego musieliśmy utworzyć osobny, bardziej precyzyjny interfejs konkretnie dla prostokątów.

Задание 1

Utwórz interfejs iCube, który będzie opisywał figurę Sześcian. Niech twój interfejs opisuje konstruktor, przyjmujący parametrem bok sześcianu, a także metody do uzyskiwania objętości sześcianu i pola powierzchni.

Задание 2

Utwórz klasę Cube, implementującą interfejs iCube.

Задание 3

Utwórz interfejs iUser, który będzie opisywał użytkownika. Zakłada się, że użytkownik będzie miał imię i wiek, a te pola będą przekazywane parametrami konstruktora. Niech twój interfejs również określa, że użytkownik będzie miał gettery (ale nie settery) dla imienia i wieku.

Задание 4

Utwórz klasę User, implementującą interfejs iUser.