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:
<?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:
<?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.
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.
Tengeneza class Cube, inayotekeleza interface
iCube.
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.
Tengeneza class User, inayotekeleza interface
iUser.