Konstruktor deklarálása interfészben OOP PHP-ben

Egy interfészben a osztály konstruktorát is deklarálhatjuk. Nézzünk egy példát. Tegyük fel, hogy elhatároztuk, hogy készítünk egy Rectangle osztályt, amelyben lesznek metódusok a terület és a kerület meghatározására, valamint egy konstruktor, amely két paramétert fogad. Írjuk le az osztályunkat az interfész segítségével:

iRectangle.php<?php
  interface iRectangle
  {
    public function __construct($a, $b); // két paraméteres konstruktor
    public function getSquare();
    public function getPerimeter();
  }
?>

Írjuk meg az iRectangle interfészünk implementációját:

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

Mit adott nekünk a konstruktor interfészben való deklarálása? Először is, nem felejtjük el implementálni a konstruktort az osztályban. Másodszor, az interfész egyértelműen megadja, hogy az osztály konstruktorának két paramétert kell fogadnia: se többet, se kevesebbet. Ez szintén véd meg minket a véletlen hibáktól.

Miért készítettünk külön iRectangle interfészt, ahelyett, hogy a konstruktort hozzáadtuk volna az Figure interfészhez? Mivel minden alakzatnak különböző számú oldala van, és ennek megfelelően a konstruktor paramétereinek száma is eltérő. Ezért kénytelenek voltunk egy külön, pontosabb interfészt készíteni kifejezetten a téglalapok számára.

Задание 1

Készítsen egy iCube interfészt, amely a Kocka alakzatot írja le. Az interfész írja le a konstruktort, amely paraméterként a kocka oldalát fogadja, valamint a kocka térfogatának és felszínének meghatározására szolgáló metódusokat.

Задание 2

Készítsen egy Cube osztályt, amely implementálja az iCube interfészt.

Задание 3

Készítsen egy iUser interfészt, amely egy felhasználót ír le. Feltételezhető, hogy a felhasználónak neve és életkora van, és ezek a mezők a konstruktor paramétereiként lesznek átadva. Az interfész állítsa be azt is, hogy a felhasználónak lesznek getterei (de setterei nem) a névhez és az életkorhoz.

Задание 4

Készítsen egy User osztályt, amely implementálja az iUser interfészt.