Объявление конструктора в интерфейсе в ООП в PHP

В интерфейсе также можно объявить конструктор класса. Посмотрим на примере. Пусть мы решили сделать класс Rectangle, в котором будут методы для нахождения площади, периметра, а также конструктор, принимающий два параметра. Давайте опишем наш класс с помощью интерфейса:

iRectangle.php<?php
  interface iRectangle
  {
    public function __construct($a, $b); // конструктор с двумя параметрами
    public function getSquare();
    public function getPerimeter();
  }
?>

Давайте напишем реализацию нашего интерфейса 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);
    }
  }
?>

Что нам дало объявление конструктора в интерфейсе? Во-первых, мы не забудем реализовать конструктор в классе. Во-вторых, интерфейс явно указывает, что конструктор класса должен принимать два параметра: ни больше, ни меньше. Это также предохранит нас от случайной ошибки.

Почему мы создали отдельный интерфейс iRectangle, а не добавили конструктор в интерфейс Figure? Потому что все фигуры имеют разное количество сторон и, соответственно, разное количество параметров в конструкторе. Поэтому нам пришлось создать отдельный, более точный интерфейс конкретно для прямоугольников.

Задание 1

Сделайте интерфейс iCube, который будет описывать фигуру Куб. Пусть ваш интерфейс описывает конструктор, параметром принимающий сторону куба, а также методы для получения объема куба и площади поверхности.

Задание 2

Сделайте класс Cube, реализующий интерфейс iCube.

Задание 3

Сделайте интерфейс iUser, который будет описывать юзера. Предполагается, что у юзера будет имя и возраст и эти поля будут передаваться параметрами конструктора. Пусть ваш интерфейс также задает то, что у юзера будут геттеры (но не сеттеры) для имени и возраста.

Задание 4

Сделайте класс User, реализующий интерфейс iUser.