⊗ppOpIfSII 73 of 107 menu

PHP-də OOP-də Bir neçə interfeys

PHP-də çoxsaylı irsiyyət yoxdur - hər bir sinif yalnız bir valideynə malik ola bilər. Lakin, interfeyslər bu baxımdan fərqlidir: hər bir sinif istənilən sayda interfeysi reallaşdıra bilər. Bunun üçün interfeys adlarını implements açar sözündən sonra vergüllə ayıraraq sadalamaq lazımdır.

Bu, interfeyslərin abstrakt siniflərdən daha bir fərqidir - bir çox interfeysi reallaşdırmaq olar, amma bir neçə abstrakt sinifi miras almaq olmaz.

Gəlin praktikada sınayaq. Tutaq ki, iFigure interfeysindən əlavə, iTetragon interfeysi də var. Bu interfeysin metodları QuadrateRectangle sinifləri tərəfindən reallaşdırılacaq, çünki onların 4 tərəfi var, amma Disk sinifi tərəfindən yox.

Tutaq ki, iTetragon interfeysi dördbucaqlının bütün dörd tərəfi üçün getter-ları təsvir edir:

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

Tutaq ki, əvvəllər etdiyimiz iFigure interfeysi də var:

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

Gəlin Quadrate sinifinin iki interfeysi reallaşdırmasını təmin edək. Bunun üçün hər iki interfeysi implements açar sözündən sonra vergüllə ayıraraq sadalayaq:

<?php class Quadrate implements iFigure, iTetragon { // burada reallaşdırma olacaq } ?>

İndi Quadrate sinifimizi iTetragon interfeysini reallaşdıracaq şəkildə işləyək. Aydındır ki, kvadratımız dördbucaqlının degenerasiyaya uğramış halıdır, çünki kvadratın bütün tərəfləri bərabərdir. Buna görə də bütün yeni metodlar eyni şeyi qaytaracaq - kvadratın eni:

<?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; } } ?>

Aydındır ki, düzbucaqlıda artıq bütün tərəflər eyni deyil, yalnız qarşılıqlı tərəflər eynidir. Bu halda yeni metodlar bir az fərqlənəcək. Yaxud hər hansı bir trapesiyada ümumiyyətlə bütün 4 tərəf fərqli olacaq.

Lakin, hansı fiquru nəzərdən keçirdiyimizin əhəmiyyəti yoxdur - vacib olan odur ki, bütün bu fiqlər təsvir olunmuş metodlara malik olacaq (baxmayaraq ki, bəzi fiqurlar degenerasiyaya uğramış ola bilər) və eyni tipli işləyəcək.

Rectangle sinifinin də iki interfeysi reallaşdırmasını təmin edin: həm iFigure, həm də iTetragon.

getRadiusgetDiameter metodları olan iCircle interfeysini yaradın.

Disk sinifinin də iki interfeysi reallaşdırmasını təmin edin: həm iFigure, həm də iCircle.

azbydeenesfrkakkptruuz