⊗ppOpIfSII 73 of 107 menu

რამდენიმე ინტერფეისი OOP-ში PHP-ში

PHP-ში არ არსებობს მრავალჯერადი მემკვიდრეობა - ყოველ კლასს შეიძლება ჰყავდეს მხოლოდ ერთი მშობელი. ინტერფეისებთან საქმე, თუმცა, სხვანაირადაა: ყოველ კლასს შეუძლია რეალიზაცია გაუწიოს ნებისმიერი რაოდენობის ინტერფეისს. ამისთვის ინტერფეისების სახელები საჭიროა განვაიხილოთ მძიმით გამოყოფილი საკვანძო სიტყვის implements შემდეგ.

ეს არის კიდევ ერთი განსხვავება ინტერფეისებს აბსტრაქტულ კლასებთან - შესაძლებელია რამდენიმე ინტერფეისის რეალიზაცია, მაგრამ რამდენიმე აბსტრაქტული კლასის მემკვიდრეობა შეუძლებელია.

შევეცადოთ პრაქტიკაში. დავუშვათ, რომ iFigure ინტერფეისის გარდა ჩვენ ასევე გვაქვს iTetragon ინტერფეისი. ამ ინტერფეისის მეთოდებს რეალიზაციას გაუწევენ Quadrate და Rectangle კლასები, რადგან მათ 4 გვერდი აქვთ, მაგრამ არა Disk კლასს.

დავუშვათ, რომ iTetragon ინტერფეისი აღწერს გეთერებს ოთხივე გვერდისთვის ოთხკუთხედის:

<?php interface iTetragon { public function getA(); public function getB(); public function getC(); public function getD(); } ?>

დავუშვათ ასევე, რომ ჩვენ გვაქვს iFigure ინტერფეისი, რომელიც ადრე გავაკეთეთ:

<?php interface iFigure { public function getSquare(); public function getPerimeter(); } ?>

გავაკეთოთ ისე, რომ Quadrate კლასმა რეალიზაცია გაუწიოს ორ ინტერფეისს. ამისთვის განვაიხილოთ ორივე ინტერფეისი მძიმით გამოყოფილი საკვანძო სიტყვის implements შემდეგ:

<?php class Quadrate implements iFigure, iTetragon { // აქ იქნება რეალიზაცია } ?>

ახლა განვავითაროთ ჩვენი Quadrate კლასი, რათა ის რეალიზაციას უზრუნველყოს iTetragon ინტერფეისისთვის. გასაგებია, რომ ჩვენი კვადრატი არის დეგენერირებული შემთხვევა ოთხკუთხედის, რადგან კვადრატს ყველა გვერდი ტოლი აქვს. ამიტომ ყველა ახალი მეთოდი დააბრუნებს ერთსა და იმავეს - კვადრატის სიგანეს:

<?php class Quadrate implements iFigure, iTetragon { private $a; public function __construct($a) { $this->a = $a; } public function getA() { return $this->a; } public function getB() { return $this->a; } public function getC() { return $this->a; } public function getD() { return $this->a; } public function getSquare() { return $this->a * $this->a; } public function getPerimeter() { return 4 * $this->a; } } ?>

ცხადია, რომ მართკუთხედში ყველა გვერდი აღარ არის ერთნაირი, არამედ მხოლოდ მოპირდაპირე. ამ შემთხვევაში ახალი მეთოდები ოდნავ განსხვავდებიან. ხო, და რაიმე ტრაპეციაში საერთოდ ყველა 4 გვერდი იქნება განსხვავებული.

თუმცა, არ აქვს მნიშვნელობა, რა ფიგურას განვიხილავთ - მნიშვნელოვანია, რომ ყველა ამ ფიგურას ექნება აღწერილი მეთოდები (დაე ზოგიერთი ფიგურა დეგენერირებული) და იმოქმედოს ერთნაირად.

გააკეთეთ ისე, რომ Rectangle კლასმა ასევე რეალიზაცია გაუწიოს ორ ინტერფეისს: هم iFigure-ს, و iTetragon-ს.

გააკეთეთ ინტერფეისი iCircle მეთოდებით getRadius და getDiameter.

გააკეთეთ ისე, რომ Disk კლასმა ასევე რეალიზაცია გაუწიოს ორ ინტერფეისს: هم iFigure-ს, و iCircle-ს.

ქართული
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
ვებსაიტის მუშაობის, ანალიტიკისა და პერსონალიზაციისთვის ვიყენებთ ქუქი-ფაილებს. მონაცემთა დამუშავება ხდება Კონფიდენციალურობის პოლიტიკის შესაბამისად.
ყველას მიღება პარამეტრები უარყოფა