Deklarasjon av konstruktør i grensesnitt i OOP i PHP

I et grensesnitt kan man også deklarere en konstruktør for klassen. La oss se på et eksempel. La oss si at vi bestemte oss for å lage en klasse Rectangle, der det vil være metoder for å finne areal, omkrets, og også en konstruktør som tar imot to parametere. La oss beskrive klassen vår ved hjelp av et grensesnitt:

iRectangle.php<?php
  interface iRectangle
  {
    public function __construct($a, $b); // konstruktør med to parametere
    public function getSquare();
    public function getPerimeter();
  }
?>

La oss skrive en implementasjon av grensesnittet vårt 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);
    }
  }
?>

Hva ga oss deklarasjonen av konstruktøren i grensesnittet? For det første vil vi ikke glemme å implementere konstruktøren i klassen. For det andre indikerer grensesnittet eksplisitt at klassens konstruktør må ta imot to parametere: verken flere eller færre. Dette beskytter oss også mot utilsiktede feil.

Hvorfor lagde vi et eget grensesnitt iRectangle, i stedet for å legge til konstruktøren i grensesnittet Figure? Fordi alle figurer har forskjellig antall sider og følgelig forskjellig antall parametere i konstruktøren. Derfor måtte vi lage et eget, mer presist grensesnitt spesifikt for rektangler.

Задание 1

Lag et grensesnitt iCube som vil beskrive figuren Kube. La grensesnittet ditt beskrive en konstruktør som tar imot kubens side som parameter, i tillegg til metoder for å få volumet av kuben og overflatearealet.

Задание 2

Lag en klasse Cube som implementerer grensesnittet iCube.

Задание 3

Lag et grensesnitt iUser som vil beskrive en bruker. Det antas at brukeren vil ha et navn og en alder, og at disse feltene vil bli sendt som parametere til konstruktøren. La grensesnittet ditt også spesifisere at brukeren vil ha gettere (men ikke settere) for navn og alder.

Задание 4

Lag en klasse User som implementerer grensesnittet iUser.