Объявление конструктора в интерфейсе
В интерфейсе также можно объявить конструктор
класса. Посмотрим на примере. Пусть мы решили
сделать класс Rectangle
, в котором
будут методы для нахождения площади, периметра,
а также конструктор, принимающий два параметра.
Давайте опишем наш класс с помощью интерфейса:
<?php
interface iRectangle
{
public function __construct($a, $b); // конструктор с двумя параметрами
public function getSquare();
public function getPerimeter();
}
?>
Давайте напишем реализацию нашего интерфейса
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);
}
}
?>
Что нам дало объявление конструктора в интерфейсе? Во-первых, мы не забудем реализовать конструктор в классе. Во-вторых, интерфейс явно указывает, что конструктор класса должен принимать два параметра: ни больше, ни меньше. Это также предохранит нас от случайной ошибки.
Почему мы создали отдельный интерфейс iRectangle
,
а не добавили конструктор в интерфейс Figure
?
Потому что все фигуры имеют разное количество
сторон и, соответственно, разное количество
параметров в конструкторе. Поэтому нам пришлось
создать отдельный, более точный интерфейс
конкретно для прямоугольников.
Сделайте интерфейс iCube
, который
будет описывать фигуру Куб. Пусть ваш интерфейс
описывает конструктор, параметром принимающий
сторону куба, а также методы для получения
объема куба и площади поверхности.
Сделайте класс Cube
, реализующий интерфейс
iCube
.
Сделайте интерфейс iUser
, который
будет описывать юзера. Предполагается, что
у юзера будет имя и возраст и эти поля будут
передаваться параметрами конструктора. Пусть
ваш интерфейс также задает то, что у юзера
будут геттеры (но не сеттеры) для имени и
возраста.
Сделайте класс User
, реализующий интерфейс
iUser
.