Declaração do construtor na interface em POO em PHP
Na interface também é possível declarar o construtor
da classe. Vejamos um exemplo. Suponha que decidimos
criar a classe Rectangle, na qual
haverá métodos para encontrar a área, o perímetro,
bem como um construtor que recebe dois parâmetros.
Vamos descrever nossa classe usando uma interface:
<?php
interface iRectangle
{
public function __construct($a, $b); // construtor com dois parâmetros
public function getSquare();
public function getPerimeter();
}
?>
Vamos escrever a implementação da nossa interface
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);
}
}
?>
O que a declaração do construtor na interface nos deu? Em primeiro lugar, não nos esqueceremos de implementar o construtor na classe. Em segundo lugar, a interface indica explicitamente que o construtor da classe deve receber dois parâmetros: nem mais, nem menos. Isso também nos protege de um erro acidental.
Por que criamos uma interface separada iRectangle,
em vez de adicionar o construtor à interface Figure?
Porque todas as figuras têm um número diferente de
lados e, consequentemente, um número diferente de
parâmetros no construtor. Portanto, tivemos que
criar uma interface separada, mais específica,
especificamente para retângulos.
Faça a interface iCube, que
descreverá a figura Cubo. Deixe sua interface
descrever o construtor, recebendo como parâmetro
o lado do cubo, bem como métodos para obter
o volume do cubo e a área da superfície.
Faça a classe Cube, implementando a interface
iCube.
Faça a interface iUser, que
descreverá o usuário. Presume-se que
o usuário terá nome e idade e esses campos serão
passados como parâmetros do construtor. Deixe
sua interface também definir que o usuário
terá getters (mas não setters) para o nome e
idade.
Faça a classe User, implementando a interface
iUser.