PHP da OOP da interfeyslardan foydalanish bo‘yicha amaliy mashq

Keling, interfeyslarning qo‘llanilishini amalda sinab ko‘raylik. Oldingi darsdagi shakllar masalasini yechamiz, lekin mavhum sinflar emas, balki interfeyslardan foydalanamiz.

Shunday qilib, endi bizda Figure interfeysi mavjud:

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

Keling, ushbu interfeys metodlarini amalga oshiradigan Quadrate sinfini yozamiz:

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

Bu qanday ishlaydi: agar interfeysda tavsiflangan har qanday metodni amalga oshirish unutilsa, PHP bizga fatal xatolik chiqaradi. Keling Rectangle sinfini ham amalga oshiramiz:

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 interfeysini amalga oshiradigan Disk sinfini yarating.