PHPде ООПде интерфейстерди колдонуу боюнча практика

Келгиле, интерфейстерди практикада колдонуп көрөлү. Мурунку сабактагы фигуралар боюнча маселени чечели, бирок азыр абстракттуу класстарды эмес, интерфейстерди колдонуп.

Ошентип, азыр бизде Figure деген интерфейс бар:

Figure.php<?php
  interface Figure
  {
    public function getSquare();
    public function getPerimeter();
  }
?>

Келгиле, бул интерфейстин ыкмаларын ишке ашыра турган Quadrate классын жазалы:

Quadrate.php<?php
  class Quadrate implements Figure
  {
    private $a;
    
    public function __construct($a)
    {
      $this->a = $a;
    }
    
    public function getSquare()
    {
      return $this->a * $this->a;
    }
    
    public function getPerimeter()
    {
      return 4 * $this->a;
    }
  }
?>

Бул кандайча иштейт: эгерде интерфейсте сүрөттөлгөн каалаган ыкманы ишке ашырууну унутсак, PHP бизге фаталдык ката чыгарат. Келгиле, ошондой эле Rectangle классын ишке ашыралы:

Rectangle.php<?php
  class Rectangle implements Figure
  {
    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);
    }
  }
?>
Задание 1

Figure интерфейсин ишке ашырган Disk классын жасаңыз.