Объявление конструктора в интерфейсе

В интерфейсе также можно объявить конструктор класса. Давайте рассмотрим на примере.

Пусть мы решили сделать класс Rectangle, к котором будут методы для нахождения площади, периметра, а также конструктор, принимающий два параметра.

Давайте опишем наш класс с помощью интерфейса iRectangle:

<?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? Потому что все фигуры имеют разное количество сторон и, соответственно, разное количество параметров в конструкторе. Поэтому нам пришлось создать отдельный, более точный интерфейс iRectangle конкретно для прямоугольников.

Сделайте интерфейс iCube, который будет описывать фигуру Куб.

Пусть ваш интерфейс описывает конструктор, параметром принимающий сторону куба, а также методы для получения объема куба и площади поверхности.

Сделайте класс Cube, реализующий интерфейс iCube.

Сделайте интерфейс iUser, который будет описывать юзера. Предполагается, что у юзера будет имя и возраст и эти поля будут передаваться параметрами конструктора.

Пусть ваш интерфейс также задает то, что у юзера будут геттеры (но не сеттеры) для имени и возраста.

Сделайте класс User, реализующий интерфейс iUser.