⊗ppOpIfSII 73 of 107 menu

Implémentation de plusieurs interfaces en POO en PHP

En PHP, il n'y a pas d'héritage multiple - chaque classe ne peut avoir qu'un seul parent. Cependant, avec les interfaces, c'est différent : chaque classe peut implémenter n'importe quel nombre d'interfaces. Pour cela, les noms des interfaces doivent être listés après le mot-clé implements, séparés par des virgules.

Ceci montre une autre différence entre les interfaces et les classes abstraites - on peut implémenter plusieurs interfaces, mais on ne peut pas hériter de plusieurs classes abstraites.

Essayons pratiquement. Supposons qu'en plus de l'interface iFigure, nous ayons également l'interface iTetragon. Les méthodes de cette interface seront implémentées par les classes Quadrate et Rectangle, car elles ont 4 côtés, mais pas par la classe Disk.

Supposons que l'interface iTetragon décrive des accesseurs (getters) pour les quatre côtés d'un quadrilatère :

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

Supposons également que nous ayons l'interface iFigure, que nous avons déjà créée précédemment :

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

Faisons en sorte que la classe Quadrate implémente deux interfaces. Pour cela, listons les deux interfaces après le mot-clé implements, séparées par une virgule :

<?php class Quadrate implements iFigure, iTetragon { // le code d'implémentation sera ici } ?>

Complétons maintenant notre classe Quadrate pour qu'elle implémente l'interface iTetragon. Il est clair que notre carré est un cas particulier de quadrilatère, car dans un carré tous les côtés sont égaux. Par conséquent, toutes les nouvelles méthodes retourneront la même chose - la largeur du carré :

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

Il est évident que dans un rectangle, tous les côtés ne sont pas identiques, seuls les côtés opposés le sont. Dans ce cas, les nouvelles méthodes seront légèrement différentes. Et dans un trapèze, par exemple, les 4 côtés seront tous différents.

Cependant, peu importe la forme que nous considérons - l'important est que toutes ces formes auront les méthodes décrites (même si certaines formes sont des cas particuliers) et fonctionneront de manière uniforme.

Faites en sorte que la classe Rectangle implémente également deux interfaces : à la fois iFigure, et iTetragon.

Créez une interface iCircle avec les méthodes getRadius et getDiameter.

Faites en sorte que la classe Disk implémente également deux interfaces : à la fois iFigure, et iCircle.

Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser