⊗ppOpIfAp 68 of 107 menu

Përdorimi i Interfejseve në OOP në PHP

Pra, ne kemi zbuluar tashmë se interfejsat janë një mënyrë e mirë për të kontrolluar që të gjitha metodat e nevojshme të klasës të jenë të implementuara.

Le të shqyrtojmë një shembull tjetër, më praktik. Supozoni se kemi një klasë që do të ruajë në vetvete një grup objektesh-forma:

<?php class FiguresCollection { private $figures = []; // grup për format } ?>

Le të implementojmë në klasën tonë metodën addFigure për shtimin e objekteve në koleksion:

<?php class FiguresCollection { private $figures = []; // Si parametër transmetohet një objekt me formë: public function addFigure($figure) { $this->figures[] = $figure; } } ?>

Është e qartë se ne po supozojmë që si parametër i metodës addFigure do të transmetohet një objekt me formë. Megjithatë, nuk ka asnjë kontroll për këtë!

Le të përdorim një sugjerim për llojet dhe të specifikojmë në mënyrë eksplicite llojin e objekteve si Figure:

<?php class FiguresCollection { private $figures = []; public function addFigure(Figure $figure) { $this->figures[] = $figure; } } ?>

Le të kuptojmë se çfarë kemi bërë.

Nëse Figure do të ishte një klasë ekzistuese realisht, atëherë në parametrin e metodës ne do të mund të transmetonim objekte të asaj klase, si dhe trashëgimtarët e saj.

Te ne, megjithatë, Figure është një interfejs. Në këtë rast, sugjerimi tregon që si parametër të metodës mund të transmetohen vetëm objekte të klasave që implementojnë interfejsin tonë.

Le të përpiqemi të krijojmë një objekt të klasës sonë dhe të shtojmë në të forma:

<?php $figuresCollection = new FiguresCollection; // Le të shtojmë disa katrorë: $figuresCollection->add(new Quadrate(2)); $figuresCollection->add(new Quadrate(3)); // Le të shtojmë disa drejtkëndësha: $figuresCollection->add(new Rectangle(2, 3)); $figuresCollection->add(new Rectangle(3, 4)); ?>

Përpjekja për të shtuar një objekt të ndonjë klase tjetër do të çojë në gabim:

<?php $figuresCollection = new FiguresCollection; class Test {}; // ndonjë klasë tjetër $figuresCollection->add(new Test); // do të japë gabim ?>

Çfarë në praktikë na jep një kontroll të tillë: meqenëse të gjitha format, të shtuara në koleksion, implementojnë interfejsin Figure, ne mund të jemi të sigurt se secila prej tyre do të ketë metodën getSquare dhe metodën getPerimeter.

Është e mundur që në të ardhmen përveç katrorit dhe drejtkëndëshit të shfaqet, për shembull, edhe një trekëndësh. Në këtë rast edhe trekëndëshi do të ketë metodat getSquare dhe getPerimeter.

Në praktikë kjo na jep sa vijon: ne mund në klasën FiguresCollection të bëjmë, për shembull, metodën getTotalSquare, që gjen sipërfaqen totale të formave të koleksionit. Në këtë metodë ne do të përsërisim me cikël grupin e formave dhe secilës forme do t'i thirrim metodën getSquare.

Meqenëse çdo formë implementon interfejsin Figure, ne mund të jemi 100% të sigurt në atë që çdo formë do të ketë këtë metodë getSquare.

Pra, ja implementimi i metodës:

<?php class FiguresCollection { private $figures = []; public function addFigure(Figure $figure) { $this->figures[] = $figure; } // Le të gjejmë sipërfaqen totale: public function getTotalSquare() { $sum = 0; foreach ($this->figures as $figure) { $sum += $figure->getSquare(); // përdorim metodën getSquare } return $sum; } } ?>

Pa parë në kodin tim, implementoni të njëjtën klasë FiguresCollection.

Shtoni në klasën FiguresCollection metodën getTotalPerimeter për gjetjen e perimetrit total të të gjitha formave.

Shqip
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ne përdorim cookie për funksionimin e sajtit, analizën dhe personalizimin. Përpunimi i të dhënave bëhet në përputhje me Politikën e Privatësisë.
prano të gjitha konfiguro refuzo