Declaración del constructor en la interfaz en POO en PHP
En la interfaz también se puede declarar el constructor
de la clase. Veamos un ejemplo. Supongamos que decidimos
crear una clase Rectangle, en la cual
habrá métodos para encontrar el área, el perímetro,
así como un constructor que acepte dos parámetros.
Describamos nuestra clase mediante una interfaz:
<?php
interface iRectangle
{
public function __construct($a, $b); // constructor con dos parámetros
public function getSquare();
public function getPerimeter();
}
?>
Escribamos la implementación de nuestra interfaz
iRectangle:
<?php
class Rectangle implements iRectangle
{
private $a;
private $b;
public function __construct($a, $b)
{
$this->a = $a;
$this->b = $b;
}
public function getSquare()
{
return $this->a * $this->b;
}
public function getPerimeter()
{
return 2 * ($this->a + $this->b);
}
}
?>
¿Qué nos dio declarar el constructor en la interfaz? En primer lugar, no olvidaremos implementar el constructor en la clase. En segundo lugar, la interfaz indica explícitamente que el constructor de la clase debe aceptar dos parámetros: ni más, ni menos. Esto también nos protege de errores accidentales.
¿Por qué creamos una interfaz separada iRectangle,
y no añadimos el constructor a la interfaz Figure?
Porque todas las figuras tienen diferente cantidad de
lados y, respectivamente, diferente cantidad de
parámetros en el constructor. Por lo tanto, tuvimos que
crear una interfaz separada, más precisa,
específicamente para rectángulos.
Cree una interfaz iCube, que
describa la figura Cubo. Que su interfaz
describa un constructor, que acepte como parámetro
el lado del cubo, así como métodos para obtener
el volumen del cubo y el área de la superficie.
Cree una clase Cube, que implemente la interfaz
iCube.
Cree una interfaz iUser, que
describa al usuario. Se supone que
el usuario tendrá un nombre y una edad y que estos campos
se pasarán como parámetros del constructor. Que
su interfaz también establezca que el usuario
tendrá getters (pero no setters) para el nombre y
la edad.
Cree una clase User, que implemente la interfaz
iUser.