PHP OOP-da interfeýsleriň ulanylyşy
Şeýlelik bilen, biz interfeýsleriň klasdyň zerur bolan metodlarynyň hemmesiniň amala aşyrylandygyny kontrol etmek üçin gowy usuldygyny anykladyk.
Iňňe bir, has amaly mysala serediň. Bizde predmetler-figuralaryň masywyny saklaýan klas bolsun:
<?php
class FiguresCollection
{
private $figures = []; // figuralar üçin masyw
}
?>
Koleksiýa predmetleri goşmak üçin bizim klasymyzda
addFigure metodyny amala aşyralyň:
<?php
class FiguresCollection
{
private $figures = [];
// Parametr hökmünde figura bilen predmet berilýär:
public function addFigure($figure)
{
$this->figures[] = $figure;
}
}
?>
addFigure metodu parametri hökmünde
figura bilen predmetiň beriljekdigine düşünýäris.
Emma buna hiç hili kontrol ýok!
Görnüşler üçin görkezmäni ulanyp we
predmetleriň görnüşini aç-açan Figure hökmünde görkezeliň:
<?php
class FiguresCollection
{
private $figures = [];
public function addFigure(Figure $figure)
{
$this->figures[] = $figure;
}
}
?>
Biz näme etdik ony düşüneliň.
Eger Figure hakyky ýaşaýan
klas bolsa, metoduň parametrine biz şol klasyň predmetlerini, şeýle hem
onuň mirasçylaryny berip bilerdik.
Bizde, ýöne, Figure - bu interfeýs.
Şeýle ýagdaýda görkezme metoduň parametrine diňe
biziň interfeýsimizi amala aşyrýan klasyň predmetleriniň berlip bilinjekdigini görkezýär.
Klasymyzyň predmetini döredip we ona figuralary goşmaga synanyşalyň:
<?php
$figuresCollection = new FiguresCollection;
// Birnäçe kwadrat goşalyň:
$figuresCollection->add(new Quadrate(2));
$figuresCollection->add(new Quadrate(3));
// Birnäçe göni burçluk goşalyň:
$figuresCollection->add(new Rectangle(2, 3));
$figuresCollection->add(new Rectangle(3, 4));
?>
Başga bir klasyň predmetini goşmaga synanyşmak säwlik döreder:
<?php
$figuresCollection = new FiguresCollection;
class Test {}; // başga bir klas
$figuresCollection->add(new Test); // säwlik berer
?>
Bu kontrol bize praktikada näme berýär:
koleksiýa goşulan ähli figuralar
Figure interfeýsini amala aşyrýany üçin,
biz her biriniň getSquare metodu we
getPerimeter metodu boljakdygyna ynançly bolaris.
Mümkin geljekde kwadrat we göni burçlukdan başga,
mysal üçin, üçburçluk hem peýda bolar.
Bu ýagdaýda üçburçlugyň hem
getSquare we
getPerimeter metodu bolar.
Praktikada bu bize şuny berýär: biz
FiguresCollection klasynda,
mysal üçin, koleksiýanyň figuralarynyň
jemi meýdanyny tapýan getTotalSquare metodyny edip bileris. Bu metoda
biz figuralaryň masywyny aýlaw bilen gaýtalaýarys we
her figura üçin getSquare metodyny çagyrarys.
Her figura Figure interfeýsini amala aşyrýany üçin, biz 100%
her biriniň bu getSquare metodyna eýe boljakdygy barada ynançly bolaris.
Şeýlelik bilen, metodunyň amala aşyrylyşy:
<?php
class FiguresCollection
{
private $figures = [];
public function addFigure(Figure $figure)
{
$this->figures[] = $figure;
}
// Jemi meýdany tapalyň:
public function getTotalSquare()
{
$sum = 0;
foreach ($this->figures as $figure) {
$sum += $figure->getSquare(); // getSquare metodyny ulanyň
}
return $sum;
}
}
?>
Meniň koduma seredip bakmazlyk ediň, şeýle
FiguresCollection klasyny amala aşyryň.
FiguresCollection klasyna
ähli figuralaryň jemi perimetrini tapmak üçin
getTotalPerimeter metodyny goşuň.