⊗ppOpIfSII 73 of 107 menu

Múltiples interfaces en POO en PHP

En PHP no hay herencia múltiple - cada clase solo puede tener un padre. Sin embargo, con las interfaces es diferente: cada clase puede implementar cualquier cantidad de interfaces. Para ello, los nombres de las interfaces deben enumerarse separados por comas después de la palabra clave implements.

Esta es otra diferencia entre las interfaces y las clases abstractas - se pueden implementar muchas interfaces, pero no se pueden heredar varias clases abstractas.

Probemos en la práctica. Supongamos que además del interfaz iFigure también tenemos el interfaz iTetragon. Los métodos de esta interfaz serán implementados por las clases Quadrate y Rectangle, ya que tienen 4 lados, pero no por la clase Disk.

Supongamos que la interfaz iTetragon describe los getters para los cuatro lados del cuadrilátero:

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

Supongamos también que tenemos la interfaz iFigure, que ya hicimos anteriormente:

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

Hagamos que la clase Quadrate implemente dos interfaces. Para ello enumeremos ambas interfaces separadas por coma después de la palabra clave implements:

<?php class Quadrate implements iFigure, iTetragon { // aquí irá la implementación } ?>

Modifiquemos ahora nuestra clase Quadrate para que implemente la interfaz iTetragon. Está claro que nuestro cuadrado es un caso degenerado de cuadrilátero, ya que en un cuadrado todos los lados son iguales. Por lo tanto, todos los métodos nuevos devolverán lo mismo - el ancho del cuadrado:

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

Obviamente, en un rectángulo no todos los lados son iguales, solo los opuestos. En este caso, los nuevos métodos serán ligeramente diferentes. Y, en un trapecio cualquiera, generalmente los 4 lados serán todos diferentes.

Sin embargo, no importa qué figura consideremos - lo importante es que todas estas figuras tendrán los métodos descritos (aunque algunas figuras sean degeneradas) y funcionarán de manera uniforme.

Haz que la clase Rectangle también implemente dos interfaces: tanto iFigure, como iTetragon.

Crea la interfaz iCircle con los métodos getRadius y getDiameter.

Haz que la clase Disk también implemente dos interfaces: tanto iFigure, como iCircle.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar