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

В интерфейсе также можно объявить конструктор класса. Посмотрим на примере. Пусть мы решили сделать класс `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`.

←→
↑