Интерфейсы в PHP
Интерфейс — это список публичных методов, которые класс ОБЯЗАН предоставить. Он говорит, что должно существовать, но не указывает, как работает каждый метод.
Интерфейс объявляется с помощью ключевого слова interface, и каждый метод в нём должен быть public.
Класс подключает интерфейс с помощью ключевого слова implements и с этого момента обязан реализовать все методы интерфейса.
В следующем примере интерфейс Animal объявляет один публичный метод, makeSound(). Поскольку Cat и Dog реализуют Animal, каждый из них обязан содержать makeSound():
Пример
Cat и Dog дают методу makeSound() собственное тело, чтобы соответствовать интерфейсу Animal:
Вывод: PHP-скрипт
<?php
// Объявляем интерфейс
interface Animal {
public function makeSound();
}
// Реализуем интерфейс в классе
class Cat implements Animal {
public function makeSound() {
echo "Meow";
}
}
// Реализуем интерфейс в другом классе
class Dog implements Animal {
public function makeSound() {
echo "Woff";
}
}
$cat = new Cat();
$cat->makeSound();
$dog = new Dog();
$dog->makeSound();
?>
Синтаксис интерфейса
Как записывается объявление интерфейса:
<?php
interface InterfaceName {
public function method1();
public function method2();
}
?>
Реализация интерфейса
Как класс реализует интерфейс:
<?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 реализуют оба метода интерфейса:
Вывод: PHP-скрипт
<?php
interface Animal {
public function fromFamily();
public function makeSound();
}
class Cat implements Animal {
public function fromFamily() {
echo "Из семейства: Felidae (родственники: львы, тигры, ягуары, рыси, пумы и гепарды).<br>";
}
public function makeSound() {
echo "Звук: Meow.";
}
}
class Dog implements Animal {
public function fromFamily() {
echo "Из семейства: Canidae (родственники: волки, лисы, койоты, шакалы и домашние собаки).<br>";
}
public function makeSound() {
echo "Звук: Woff.";
}
}
echo "<h3>Кошки</h3>";
$cat = new Cat();
$cat->fromFamily();
$cat->makeSound();
echo "<h3>Собаки</h3>";
$dog = new Dog();
$dog->fromFamily();
$dog->makeSound();
?>