Перейти к основному содержимому

Интерфейсы в PHP

Интерфейс — это список публичных методов, которые класс ОБЯЗАН предоставить. Он говорит, что должно существовать, но не указывает, как работает каждый метод.

Интерфейс объявляется с помощью ключевого слова interface, и каждый метод в нём должен быть public.

Класс подключает интерфейс с помощью ключевого слова implements и с этого момента обязан реализовать все методы интерфейса.

В следующем примере интерфейс Animal объявляет один публичный метод, makeSound(). Поскольку Cat и Dog реализуют Animal, каждый из них обязан содержать makeSound():

Пример

Cat и Dog дают методу makeSound() собственное тело, чтобы соответствовать интерфейсу Animal:

Prompt
Создайте в PHP интерфейс Animal с методом makeSound(). Создайте классы Cat и Dog, которые реализуют интерфейс Animal и выводят свои звуки. Создайте объекты и вызовите makeSound() у каждого из них.
Вывод: PHP-скрипт

Синтаксис интерфейса

Как записывается объявление интерфейса:

index.php
<?php
interface InterfaceName {
  public function method1();
  public function method2();
}
?>

Реализация интерфейса

Как класс реализует интерфейс:

index.php
<?php
class ClassName implements InterfaceName{
  public function method1() {
    // some code
  }
  public function method2(){
    // some code
  }
}
?>

PHP - Интерфейсы и абстрактные классы

У интерфейсов много общего с абстрактными классами, но они различаются в нескольких отношениях:

  • У абстрактного класса могут быть свойства, а у интерфейса — нет
  • Методы интерфейса всегда публичные, а абстрактные методы могут быть публичными или защищёнными
  • Каждый метод интерфейса абстрактный, поэтому у него нет реализации в коде, и писать ключевое слово abstract не нужно
  • Класс может одновременно расширять другой класс и реализовывать интерфейс

Главное преимущество интерфейсов в том, что разные классы можно использовать одинаковым образом. Когда один или несколько классов имеют общий интерфейс, это называют «полиморфизмом».


PHP - Использование интерфейсов

На этот раз интерфейс Animal объявляет два публичных метода, fromFamily() и makeSound(). Cat и Dog реализуют интерфейс, поэтому каждый класс обязан содержать оба метода:

Пример

Cat и Dog реализуют оба метода интерфейса:

Prompt
Создайте в PHP интерфейс Animal с методами fromFamily() и makeSound(). Создайте классы Cat и Dog, которые реализуют оба метода с подробной информацией о семействе и звуками. Создайте объекты и вызовите оба метода.
Вывод: PHP-скрипт