⊗ppOpFnAp 68 of 107 menu

Ինտերֆեյսների կիրառությունը OOP-ում PHP-ում

Այսպիսով, մենք արդեն պարզել ենք, որ ինտերֆեյսները լավ միջոց են դասի բոլոր անհրաժեշտ մեթոդների իրականացումը վերահսկելու համար:

Եկեք դիտարկենք մեկ այլ, ավելի գործնական օրինակ: Ենթադրենք, մենք ունենք մի դաս, որը պահելու է օբյեկտ-ձևերի զանգված.

<?php class FiguresCollection { private $figures = []; // զանգված ձևերի համար } ?>

Եկեք իրականացնենք մեր դասում addFigure մեթոդը օբյեկտները հավաքածուում ավելացնելու համար.

<?php class FiguresCollection { private $figures = []; // Պարամետրով փոխանցվում է օբյեկտ ձևով. public function addFigure($figure) { $this->figures[] = $figure; } } ?>

Ակնհայտ է, որ մենք հաշվում ենք, որ addFigure մեթոդի պարամետրով կփոխանցվի օբյեկտ ձևով: Սակայն դրա համար չկա որևէ վերահսկողություն:

Եկեք օգտագործենք տիպերի համար հուշում և բացահայտ նշենք օբյեկտների տիպը որպես Figure.

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

Եկեք հասկանանք, թե ինչ ենք մենք արել:

Եթե Figure իրականում գոյություն ունեցող դաս լիներ, ապա մեթոդի պարամետրին մենք կկարողանայինք փոխանցել այդ դասի օբյեկտները, և նաև դրա ժառանգները:

Սակայն մեր դեպքում Figure-ը ինտերֆեյս է: Այս դեպքում հուշումը նշանակում է, որ մեթոդի պարամետրին կարող են փոխանցվել միայն մեր ինտերֆեյսն իրականացնող դասերի օբյեկտները:

Եկեք փորձենք ստեղծել մեր դասի օբյեկտը և ավելացնել դրանում ձևեր.

<?php $figuresCollection = new FiguresCollection; // Ավելացնենք մի քանի քառակուսի. $figuresCollection->addFigure(new Quadrate(2)); $figuresCollection->addFigure(new Quadrate(3)); // Ավելացնենք մի քանի ուղղանկյուն. $figuresCollection->addFigure(new Rectangle(2, 3)); $figuresCollection->addFigure(new Rectangle(3, 4)); ?>

Ցանկացած այլ դասի օբյեկտ ավելացնելու փորձը կհանգեցնի սխալի.

<?php $figuresCollection = new FiguresCollection; class Test {}; // ինչ-որ այլ դաս $figuresCollection->addFigure(new Test); // կտա սխալ ?>

Ինչ է գործնականում տալիս մեզ նման վերահսկողությունը. քանի որ հավաքածուում ավելացված բոլոր ձևերը իրականացնում են Figure ինտերֆեյսը, մենք կարող ենք վստահ լինել, որ դրանցից յուրաքանչյուրն ունի getSquare մեթոդը և getPerimeter մեթոդը:

Հնարավոր է, որ ապագայում քառակուսուց և ուղղանկյունից բացի հայտնվի, օրինակ, նաև եռանկյուն: Այս դեպքում եռանկյունը նույնպես կունենա getSquare և getPerimeter մեթոդները:

Գործնականում սա մեզ տալիս է հետևյալը. մենք կարող ենք FiguresCollection դասում ստեղծել, օրինակ, getTotalSquare մեթոդը, որը գտնում է հավաքածուի ձևերի ընդհանուր մակերեսը: Այս մեթոդում մենք կփնտրենք ցիկլով ձևերի զանգվածը և յուրաքանչյուր ձևի համար կկանչենք getSquare մեթոդը:

Քանի որ յուրաքանչյուր ձև իրականացնում է Figure ինտերֆեյսը, մենք կարող ենք 100% վստահ լինել, որ յուրաքանչյուր ձև կունենա getSquare մեթոդը:

Այսպիսով, ահա մեթոդի իրականացումը.

<?php class FiguresCollection { private $figures = []; public function addFigure(Figure $figure) { $this->figures[] = $figure; } // Գտնենք ընդհանուր մակերեսը. public function getTotalSquare() { $sum = 0; foreach ($this->figures as $figure) { $sum += $figure->getSquare(); // օգտագործում ենք getSquare մեթոդը } return $sum; } } ?>

Չնայելով իմ կոդին, իրականացրեք նույն FiguresCollection դասը:

Ավելացրեք FiguresCollection դասում getTotalPerimeter մեթոդը բոլոր ձևերի ընդհանուր պարագիծը գտնելու համար:

Հայերեն
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Մենք օգտագործում ենք cookie-ներ կայքի աշխատանքի, վերլուծության և անհատականացման համար։ Տվյալների մշակումը կատարվում է համաձայն Գաղտնիության քաղաքականության։
ընդունել բոլորը կարգավորել մերժել