PHP da OOP da interfeysda konstruktor e'lon qilish

Interfeysda shuningdek, klass konstruktorini e'lon qilish mumkin. Keling, bir misolni ko'ramiz. Faraz qilaylik, biz Rectangle klassini yaratishga qaror qildik, unda yuzani, perimetrni topish uchun metodlar, shuningdek, ikkita parametrni qabul qiladigan konstruktor bo'ladi. Keling, klassimizni interfeys yordamida tavsiflaymiz:

iRectangle.php<?php
  interface iRectangle
  {
    public function __construct($a, $b); // ikkita parametrli konstruktor
    public function getSquare();
    public function getPerimeter();
  }
?>

Keling, iRectangle interfeysimizni amalga oshiruvchi klass yozamiz:

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

Interfeysda konstruktor e'lon qilish bizga nima berdi? Birinchidan, biz klassda konstruktorni amalga oshirishni unutmaymiz. Ikkinchidan, interfeys aniq ko'rsatadiki, klass konstruktori ikkita parametr qabul qilishi kerak: ko'p emas, kam emas. Bu, shuningdek, bizni tasodifiy xatolardan himoya qiladi.

Nima uchun biz iRectangle alohida interfeysini yaratdik, Figure interfeysiga konstruktorni qo'shmadikmi? Chunki barcha figurallar har xil miqdordagi tomonlarga ega va shuning uchun ularning konstruktorlarida har xil miqdordagi parametrlar bo'ladi. Shuning uchun bizga to'g'ridan-to'g'ri to'rtburchaklar uchun alohida, aniqroq interfeys yaratishga to'g'ri keldi.

Задание 1

iCube interfeysini yarating, u Kub figurasini tavsiflaydi. Interfeyingiz kub tomonini parametr sifatida qabul qiladigan konstruktorni, shuningdek, kub hajmi va sirt yuzasini olish uchun metodlarni tavsiflasin.

Задание 2

iCube interfeysini amalga oshiradigan Cube klassini yarating.

Задание 3

iUser interfeysini yarating, u foydalanuvchini tavsiflaydi. Foydalanuvchining ismi va yoshi bo'lishi va bu maydonlar konstruktor parametrlari sifatida uzatilishi taxmin qilinadi. Interfeyingiz shuningdek, foydalanuvchida ism va yosh uchun getterlar (lekin setterlar emas) bo'lishini belgilasin.

Задание 4

iUser interfeysini amalga oshiradigan User klassini yarating.