⊗ppOpIfAp 68 of 107 menu

Matumizi ya Interfaces katika OOP katika PHP

Kwa hivyo, tumeona kwamba interfaces ni njia nzuri ya kudhibiti kuwa mbinu zote muhimu za darasa zimetekelezwa.

Wacha tuchunguze mfano mwingine, unaotumika zaidi katika mazoezi. Tuchukulie tuna darasa ambalo litahifadhi safu ya vitu maumbo:

<?php class FiguresCollection { private $figures = []; // safu ya maumbo } ?>

Wacha tutekeleze katika darasa letu mbinu addFigure ya kuongeza vitu kwenye mkusanyiko:

<?php class FiguresCollection { private $figures = []; // Kigezo hupeanwa kitu cha umbo: public function addFigure($figure) { $this->figures[] = $figure; } } ?>

Ni wazi kabisa kwamba tunategemea kuwa kigezo cha mbinu addFigure kitapeanwa kitu chenye umbo. Hata hivyo, hakuna udhibiti wowote wa hili!

Wacha tutumie kidokezo cha aina na tubainishe wazi aina ya vitu kama Figure:

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

Wacha tuchambue kile tulichofanya.

Kama Figure ungekuwa darasa uliopo kwa kweli, basi kwenye kigezo cha mbinu tungeweza kupeana vitu vya darasa hilo, na pia warithi wake.

Kwetu, hata hivyo, Figure ni interface. Katika kesi hiyo kidokezo kinaonyesha kuwa kigezo cha mbinu kinaweza tu kupeanwa vitu vya darasa ambavyo vinatekeleza interface yetu.

Wacha tujaribu kuunda kitu cha darasa letu na kuongeza maumbo ndani yake:

<?php $figuresCollection = new FiguresCollection; // Ongeze miraba michache: $figuresCollection->add(new Quadrate(2)); $figuresCollection->add(new Quadrate(3)); // Ongeze mistatili michache: $figuresCollection->add(new Rectangle(2, 3)); $figuresCollection->add(new Rectangle(3, 4)); ?>

Jaribio la kuongeza kitu la darasa lingine lolote litasababisha hitilafu:

<?php $figuresCollection = new FiguresCollection; class Test {}; // darasa lingine fulani $figuresCollection->add(new Test); // itatoa hitilafu ?>

Kwa mazoezi udhibiti kama huu unatupa nini: kwa kuwa maumbo yote yaliyoongezwa kwenye mkusanyiko, yanatekeleza interface Figure, tunaweza kuwa na uhakika, kwamba kila mmoja wao utakuwa na mbinu getSquare na mbinu getPerimeter.

Yamkini baadaye badala ya mraba na mstatili itakuja, kwa mfano, pia pembetatu. Katika kesi hiyo na pembetatu pia itakuwa na mbinu getSquare na getPerimeter.

Kwa mazoezi hii inatupa yafuatayo: tunaweza katika darasa FiguresCollection kutengeneza, kwa mfano, mbinu getTotalSquare, inayopata eneo jumla la maumbo ya mkusanyiko. Katika mbinu hii tutakwenda kupitia safu ya maumbo kwa mzunguko na kwa kila umbo kuita mbinu getSquare.

Kwa kuwa kila umbo linatekeleza interface Figure, tunaweza kuwa na uhakika wa 100% katika kwamba, kila umbo kitakuwa na mbinu hii getSquare.

Kwa hivyo, hapa kuna utekelezaji wa mbinu:

<?php class FiguresCollection { private $figures = []; public function addFigure(Figure $figure) { $this->figures[] = $figure; } // Tupate eneo jumla: public function getTotalSquare() { $sum = 0; foreach ($this->figures as $figure) { $sum += $figure->getSquare(); // tunatumia mbinu getSquare } return $sum; } } ?>

Bila kuangalia kwenye msimbo wangu utekeleze darasa kama hilo FiguresCollection.

Ongeza katika darasa FiguresCollection mbinu getTotalPerimeter ya kupata mzingo jumla wa maumbo yote.

Kiswahili
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Tunatumia kuki kwa ajili ya uendeshaji wa tovuti, uchambuzi na ubinafsishaji. Usindikaji wa data unafanyika kulingana na Sera ya Faragha.
kubali yote sanidi kataa