⊗ppOpIfSII 73 of 107 menu

Mai multe interfețe în OOP în PHP

În PHP nu există moștenire multiplă - fiecare clasă poate avea un singur părinte. Cu interfețele, însă, situația este diferită: fiecare clasă poate implementa orice număr de interfețe. Pentru a face acest lucru, numele interfețelor trebuie enumerate separate prin virgulă după cuvântul cheie implements.

Aceasta este o altă diferență între interfețe și clasele abstracte - se pot implementa multe interfețe, dar nu se pot moșteni mai multe clase abstracte.

Să încercăm în practică. Să presupunem că, pe lângă interfața iFigure, avem și interfața iTetragon. Metodele acestei interfețe vor fi implementate de clasele Quadrate și Rectangle, deoarece acestea au 4 laturi, dar nu și de clasa Disk.

Să presupunem că interfața iTetragon descrie metodele de tip getter pentru toate cele patru laturi ale patrulaterului:

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

Să presupunem că avem și interfața iFigure, pe care am creat-o anterior:

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

Să facem ca clasa Quadrate să implementeze două interfețe. Pentru a face acest lucru, enumerăm ambele interfețe separate prin virgulă după cuvântul cheie implements:

<?php class Quadrate implements iFigure, iTetragon { // aici va fi implementarea } ?>

Să modificăm acum clasa noastră Quadrate, astfel încât să implementeze interfața iTetragon. Este clar că pătratul nostru este un caz degenerat al unui patrulater, deoarece un pătrat are toate laturile egale. Prin urmare, toate noile metode vor returna același lucru - lățimea pătratului:

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

Evident, într-un dreptunghi nu toate laturile sunt identice, ci doar cele opuse. În acest caz, noile metode vor fi ușor diferite. Și, într-un trapez, toate cele 4 laturi vor fi complet diferite.

Cu toate acestea, nu contează ce figură considerăm - important este că toate aceste figuri vor avea metodele descrise (chiar dacă unele figuri sunt degenerate) și vor funcționa într-un mod similar.

Faceți ca și clasa Rectangle să implementeze două interfețe: atât iFigure, cât și iTetragon.

Creați interfața iCircle cu metodele getRadius și getDiameter.

Faceți ca și clasa Disk să implementeze două interfețe: atât iFigure, cât și iCircle.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge