Konstruktora deklarēšana interfeisā OOP PHP
Interfeisā var arī deklarēt klases konstruktoru.
Apskatīsim piemērā. Pieņemsim, ka mēs nolēmām
izveidot klasi Rectangle, kurā būs
metodes laukuma, perimetra atrašanai,
kā arī konstruktors, kas pieņem divus parametrus.
Aprakstīsim savu klasi, izmantojot interfeisu:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktors ar diviem parametriem
public function getSquare();
public function getPerimeter();
}
?>
Uzrakstīsim mūsu interfeisa iRectangle
implementāciju:
<?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);
}
}
?>
Ko mums deva konstruktora deklarēšana interfeisā? Pirmkārt, mēs neaizmirsīsim implementēt konstruktoru klasē. Otrkārt, interfeiss skaidri norāda, ka klases konstruktoram jāpieņem divi parametri: ne vairāk, ne mazāk. Tas arī sargā mūs no nejaušas kļūdas.
Kāpēc mēs izveidojām atsevišķu interfeisu iRectangle,
nevis pievienojām konstruktoru interfeisam Figure?
Tāpēc, ka visām figūrām ir atšķirīgs malu skaits
un attiecīgi atšķirīgs parametru skaits
konstruktorā. Tāpēc mums nācās
izveidot atsevišķu, precīzāku interfeisu
konkrēti taisnstūriem.
Izveidojiet interfeisu iCube, kas
aprakstīs figūru Kubs. Lai jūsu interfeiss
apraksta konstruktoru, kas parametru pieņem
kuba malu, kā arī metodes kuba
tilpuma un virsmas laukuma iegūšanai.
Izveidojiet klasi Cube, kas implementē interfeisu
iCube.
Izveidojiet interfeisu iUser, kas
aprakstīs lietotāju. Tiek pieņemts, ka
lietotājam būs vārds un vecums un ka šie lauki tiks
padoti kā konstruktora parametri. Lai
jūsu interfeiss arī nosaka to, ka lietotājam
būs get metodes (bet ne set metodes) vārdam un
vecumam.
Izveidojiet klasi User, kas implementē interfeisu
iUser.