Declaração do construtor na interface em POO em PHP

Na interface também é possível declarar o construtor da classe. Vejamos um exemplo. Suponha que decidimos criar a classe Rectangle, na qual haverá métodos para encontrar a área, o perímetro, bem como um construtor que recebe dois parâmetros. Vamos descrever nossa classe usando uma interface:

iRectangle.php<?php
  interface iRectangle
  {
    public function __construct($a, $b); // construtor com dois parâmetros
    public function getSquare();
    public function getPerimeter();
  }
?>

Vamos escrever a implementação da nossa interface 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 que a declaração do construtor na interface nos deu? Em primeiro lugar, não nos esqueceremos de implementar o construtor na classe. Em segundo lugar, a interface indica explicitamente que o construtor da classe deve receber dois parâmetros: nem mais, nem menos. Isso também nos protege de um erro acidental.

Por que criamos uma interface separada iRectangle, em vez de adicionar o construtor à interface Figure? Porque todas as figuras têm um número diferente de lados e, consequentemente, um número diferente de parâmetros no construtor. Portanto, tivemos que criar uma interface separada, mais específica, especificamente para retângulos.

Задание 1

Faça a interface iCube, que descreverá a figura Cubo. Deixe sua interface descrever o construtor, recebendo como parâmetro o lado do cubo, bem como métodos para obter o volume do cubo e a área da superfície.

Задание 2

Faça a classe Cube, implementando a interface iCube.

Задание 3

Faça a interface iUser, que descreverá o usuário. Presume-se que o usuário terá nome e idade e esses campos serão passados como parâmetros do construtor. Deixe sua interface também definir que o usuário terá getters (mas não setters) para o nome e idade.

Задание 4

Faça a classe User, implementando a interface iUser.