Konstruktori deklareerimine liideses OOP-s PHP-s

Liideses saab samuti deklareerida klassi konstruktori. Vaatame näidet. Oletame, et otsustasime teha klassi Rectangle, kus on meetodid pindala ja perimeetri leidmiseks, samuti konstruktor, mis võtab vastu kaks parameetrit. Kirjeldame oma klassi liidese abil:

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

Kirjutame oma liidese iRectangle realisatsiooni:

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

Mida andis meile konstruktori deklareerimine liideses? Esiteks, me ei unusta realisida konstruktorit klassis. Teiseks, liides näitab selgelt, et klassi konstruktor peab võtma vastu kaks parameetrit: mitte rohkem ega vähem. See ka kaitseb meid juhusiku vea eest.

Miks me lõime eraldi liidese iRectangle, mitte ei lisanud konstruktorit liidesesse Figure? Sest kõigil kujunditel on erinev arv külgi ja vastavalt erinev arv parameetreid konstruktoris. Seetõttu pidime me looma eraldi, täpsema liidese spetsiaalselt ristkülikute jaoks.

Задание 1

Tehke liides iCube, mis kirjeldab kujundit Kuup. Olgu teie liides kirjeldab konstruktorit, mis parameetrina võtab vastu kuubi külje, ning meetodeid kuubi ruumala ja pindala saamiseks.

Задание 2

Tehke klass Cube, mis realiseerib liidest iCube.

Задание 3

Tehke liides iUser, mis kirjeldab kasutajat. Eeldatakse, et kasutajal on nimi ja vanus ning need väljad antakse edasi konstruktori parameetritena. Olgu teie liides määrab ka selle, et kasutajal on getterid (aga mitte setterid) nime ja vanuse jaoks.

Задание 4

Tehke klass User, mis realiseerib liidest iUser.