⊗ppOpIfAp 68 of 107 menu

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->add(new Quadrate(2)); $figuresCollection->add(new Quadrate(3)); // Бир нече тик бурчтук кошуйлу: $figuresCollection->add(new Rectangle(2, 3)); $figuresCollection->add(new Rectangle(3, 4)); ?>

Башка класстын объектин кошууга аракет кылуу катага алып келет:

<?php $figuresCollection = new FiguresCollection; class Test {}; // башка бир класс $figuresCollection->add(new Test); // ката чыгарат ?>

Иш жүзүндө мындай көзөмөл бизге эмне берет: коллекцияга кошулган бардык фигуралар Figure интерфейсин ишке ашыргандыктан, биз ар биринин getSquare методу жана getPerimeter методу бар экенине ишене алабыз.

Келечекте квадрат жана тик бурчтуктан тышкары, мисалы, үч бурчтук пайда болушу мүмкүн. Мындай учурда үч бурчтуктун да getSquare жана getPerimeter методдору болот.

Иш жүзүндө бул бизге төмөнкүнү берет: биз FiguresCollection класында, мисалы, коллекциянын бардык фигураларынын жалпы аянтын тапкан getTotalSquare методун жасай алабыз. Бул методдо биз фигуралар массивин цикл менен айланып чыгып, ар бир фигурадан getSquare методун чакырабыз.

Ар бир фигура Figure интерфейсин ишке ашыргандыктан, биз ар бир фигурада бул getSquare метод бар экенине 100% ишене алабыз.

Ошентип, методдун ишке ашырылышы:

<?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हिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어LietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Биз сайттин иштөөсү, аналитика жана персонализация үчүн cookie файлдарын колдонобуз. Маалыматтарды иштетүү Маалыматты коргоо саясаты боюнча жүргүзүлөт.
баарын кабыл алуу ыңгайлаштыруу четке кагуу