⊗ppOpIfAp 68 of 107 menu

PHP da OOP da Interfeyslardan Foydalanish

Shunday qilib, biz allaqachon bilib oldikki, interfeyslar - bu kerakli barcha klass metodlari amalga oshirilganligini nazorat qilishning yaxshi usuli.

Keling, yana bir, amaliyroq misolni ko'rib chiqaylik. Faraz qilaylik, bizda obyekt-shakllar massivini saqlaydigan klass mavjud:

<?php class FiguresCollection { private $figures = []; // shakllar uchun massiv } ?>

Kolleksiyaga obyektlarni qo'shish uchun klassimizda addFigure metodini amalga oshiramiz:

<?php class FiguresCollection { private $figures = []; // Parametr sifatida shakl bilan obyekt uzatiladi: public function addFigure($figure) { $this->figures[] = $figure; } } ?>

Aniqki, biz addFigure metodi parametri sifatida shakl bilan obyekt uzatilishini hisoblaymiz. Biroq buning uchun hech qanday nazorat yo'q!

Keling, turlar uchun maslahatdan foydalanamiz va obyektlar turini aniq Figure deb ko'rsatamiz:

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

Keling, nima qilganimizni aniqlab olaylik.

Agar Figure haqiqiy mavjud bo'lgan klass bo'lsa, metod parametriga biz ushbu klassning obyektlarini, shuningdek uning vorislarini ham uzata olamiz.

Bizda, Figure interfeys ekan. Bunday holda, maslahat shuni anglatadiki, metod parametriga faqat bizning interfeysimizni amalga oshiradigan klassning obyektlari uzatilishi mumkin.

Keling, klassimizning obyektini yaratishga va unga shakllarni qo'shishga harakat qilaylik:

<?php $figuresCollection = new FiguresCollection; // Bir nechta kvadrat qo'shamiz: $figuresCollection->add(new Quadrate(2)); $figuresCollection->add(new Quadrate(3)); // Bir nechta to'rtburchak qo'shamiz: $figuresCollection->add(new Rectangle(2, 3)); $figuresCollection->add(new Rectangle(3, 4)); ?>

Boshqa bir klassning obyektini qo'shishga urinish xatolikka olib keladi:

<?php $figuresCollection = new FiguresCollection; class Test {}; // boshqa bir klass $figuresCollection->add(new Test); // xatolik beradi ?>

Amaliyotda bunday nazorat bizga nima beradi: chunki kolleksiyaga qo'shilgan barcha shakllar Figure interfeysini amalga oshiradi, biz har birida getSquare metodi va getPerimeter metodi bo'lishiga ishonch hosil qilamiz.

Ehtimol kelajakda kvadrat va to'rtburchakdan tashqari masalan, uchburchak ham paydo bo'ladi. Bu holda uchburchakda ham getSquare va getPerimeter metodlari bo'ladi.

Amaliyotda bu bizga quyidagilarni beradi: biz FiguresCollection klassida, masalan, kolleksiya shakllarining to'liq maydonini topadigan getTotalSquare metodini yaratishimiz mumkin. Ushbu metodda biz shakllar massivini tsiklda aylantiramiz va har bir shaklda getSquare metodini chaqiramiz.

Chunki har bir shakl Figure interfeysini amalga oshiradi, biz 100% har bir shaklda ushbu getSquare metodining bo'lishiga ishonch hosil qilamiz.

Shunday qilib, metodni amalga oshirish:

<?php class FiguresCollection { private $figures = []; public function addFigure(Figure $figure) { $this->figures[] = $figure; } // To'liq maydonni topamiz: public function getTotalSquare() { $sum = 0; foreach ($this->figures as $figure) { $sum += $figure->getSquare(); // getSquare metodidan foydalanamiz } return $sum; } } ?>

Mening kodimga qaramay, xuddi shunday FiguresCollection klassini amalga oshiring.

FiguresCollection klassiga barcha shakllarning umumiy perimetrini topish uchun getTotalPerimeter metodini qo'shing.

Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish