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

iCube интерфейсин ишке ашырган Cube классын жасагыла.

Задание 3

iUser интерфейсин жасагыла, ал колдонуучуну сүрөттөсүн. Колдонуучунун аты жана жашы бар деп болжолдонууда жана бул талаалар конструкторго параметрлер катары өткөрүлөт деп айтылат. Сиздин интерфейсиңиз ошондой эле колдонуучунун аты жана жашы үчүн getterлер (бирок setterлер эмес) болушун талап кылсын.

Задание 4

iUser интерфейсин ишке ашырган User классын жасагыла.