კონსტრუქტორის დეკლარირება ინტერფეისში OOP-ში 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.