Для полного понимания интерфейсов, вам нужно понимать объектно ориентированое программирование. Я покажу как создавать интерфейсы в PHP и для чего они могут пригодиться.
Для чего нужны интерфейсы
- интерфейсы — это 100% абстрактные классы, у котором есть методы, но в них нет никакой логики, то есть являются пустышками.
- они не могут быть инициализированы как обычные классы. Их основная задача — это быть конструктором для класса(-ов), задавая нужную структура
Если все что я написал выше, вам не понятно, то этой нормально, потому что я тоже сначала не понимал. Давайте посмотрим на простой пример класса и создадим на его примере интерфейс. Далее я буду подробно описывать что происходит с тем или иным участком кода.
Пример класса
<?php class Apple { public function getName() { return 'яблоко'; } public function getShape() { return 'круглый'; } }
Теперь у нас есть класс, который называется Apple
(Яблоко) и внутри метод getName()
, для получения имени фрукта и getShape()
для получения его формы (круглый). В дальнейшем у вас может быть много фруктов и чтобы не забывать для каждого из них указывать эти методы — можно создать интерфейс, который будет выводить ошибку каждый раз когда мы забудете указать тот или иной метод.
Пример интерфейса
<?php interface Fruit { /** * Получить название фрукта. * @return string */ public function getName(); /** * Получить форму фрукта. * @return string */ public function getShape(); }
Интерфейсы начинаются с ключевого слова interface
и далее название интерфейса. В этом примере — это Fruit
(фрукт). Теперь все классы, которые будут унаследовать этот интерфейс должны включать в себя методы getName()
и getShape()
.
Давайте теперь возьмем Apple
и свежесозданным интерфейсом:
<?php class Apple implements Fruit { public function getName() { return 'яблоко'; } public function getShape() { return 'круглый'; } } interface Fruit { /** * Получить название фрукта. * @return string */ public function getName(); /** * Получить форму фрукта. * @return string */ public function getShape(); }
Работает это следующим образом: у вас есть класс, который имлементирует Fruit интерфейс. Внутри него указаны какие методы должны быть у класса, которые будет его использовать. И если какой-то из них будет упущен, тогда PHP выдаст Exception (ошибку) и укажет что именно не так.
Давайте создадим новый класс с использованием Fruit
интерфейса. Внутри класс будет лишь один метод, тем самым PHP должен выдать ошибку.
<?php class Orange implements Fruit { public function getName() { return 'апельсин'; } }
И теперь попробуйте открыть файл с этим классом. У вас должно вывести следующую ошибку:
PHP Fatal error: Class Orange contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Fruit::getShape) in Orange.php on line 22 PHP Stack trace: PHP 1. {main}() Orange.php:0
Ошибка понятным языком описывает, что у вас отсутствует метод getShape()
, которые обязателен при использовании Fruit
интерфейса.
Послесловие
Интерфейсы помогают определять структуру для классов. В дальнейшем вам будет проще понимать какие методы должны быть добавлены в класс благодаря им. Так же это прекрасный вариант для работы в команде — вы задали структуру в начале и каждый дальнейший разработчик будет видеть какая должна быть структура у класса.