Kutangaza Mjenzi katika Interface katika OOP katika PHP

Katika interface pia inawezekana kutangaza mjenzi wa class. Tuangalie kwa mfano. Tuseme tumeweka nia kutengeneza class Rectangle, ambayo itakuwa na njia za kupata eneo, mzunguko, na pia mjenzi, unaokubali vigezo viwili. Wacha tuelezee class yetu kwa kutumia interface:

iRectangle.php<?php
  interface iRectangle
  {
    public function __construct($a, $b); // mjenzi wenye vigezo viwili
    public function getSquare();
    public function getPerimeter();
  }
?>

Wacha tuandike utekelezaji wa interface yetu 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);
    }
  }
?>

Nini kililetwa na kutangaza mjenzi katika interface? Kwanza, hatutasahau kutekeleza mjenzi katika class. Pili, interface inaonyesha wazi, kwamba mjenzi wa class anapaswa kukubali vigezo viwili: sio zaidi, wala pungufu. Hii pia inatu kinga kutoka kwa makosa ya bahati nasibu.

Kwa nini tuliumba interface tofauti iRectangle, badala ya kuongeza mjenzi kwenye interface Figure? Kwa sababu takwimu zote zina idadi tofauti ya pande na, ipasavyo, idadi tofauti ya vigezo katika mjenzi. Kwa hivyo ilibidi tuunde interface tofauti, sahihi zaidi hasa kwa mistatili.

Задание 1

Tengeneza interface iCube, ambao utaelezea takwimu ya Mchemraba. Acha interface yako ielezee mjenzi, unaokubali upande wa mchemraba kama kigezo, na pia njia za kupata ujazo wa mchemraba na eneo la uso.

Задание 2

Tengeneza class Cube, inayotekeleza interface iCube.

Задание 3

Tengeneza interface iUser, ambao utaelezea mtumiaji. Inadhaniwa kwamba mtumiaji atakuwa na jina na umri na sehemu hizi zitapewa kwenye mjenzi kama vigezo. Acha interface yako pia ibainishe kwamba mtumiaji atakuwa na getters (lakini si setters) kwa jina na umri.

Задание 4

Tengeneza class User, inayotekeleza interface iUser.