АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP или фреймворки. Сегодня последний день для записи! Жми!
⊗ppOpIfCD 39 of 107 menu
Долгожданный Бесплатный курс по выкладке сайта на хостинг. МЫ УЖЕ НАЧАЛИ! Присоединяйтесь к нам!

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

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