PHP ООП - Интерфейсы
PHP - Что такое интерфейсы?
Интерфейсы позволяют указать, какие методы должен реализовывать класс.
Интерфейсы позволяют легко использовать различные классы одним и тем же способом. Когда один или несколько классов используют один и тот же интерфейс, это называется "полиморфизмом".
Интерфейсы объявляются с помощью ключевого слова interface
:
Синтаксис
<?php
interface InterfaceName {
public function someMethod1();
public function someMethod2($name, $color);
public function
someMethod3() : string;
}
?>
PHP - Интерфейсы и абстрактные классы
Интерфейс похож на абстрактные классы. Разница между интерфейсами и абстрактными классами заключается в следующем:
- Интерфейсы не могут иметь свойств, в то время как абстрактные классы могут
- Все методы интерфейса должны быть общедоступными, а методы абстрактного класса - общедоступными или защищенными
- Все методы в интерфейсе являются абстрактными, поэтому они не могут быть реализованы в коде, и ключевое слово abstract не требуется
- Классы могут реализовывать интерфейс, одновременно наследуя от другого класса
PHP - Использование интерфейсов
Чтобы реализовать интерфейс, класс должен использовать ключевое слово implements
.
Класс, реализующий интерфейс, должен реализовывать все методы интерфейса.
Пример
<?php
interface Animal {
public function makeSound();
}
class Cat implements Animal {
public function makeSound() {
echo "Meow";
}
}
$animal = new Cat();
$animal->makeSound();
?>
Попробуйте сами »
Из приведенного выше примера предположим, что мы хотели бы написать программу, которая управляет группой животных. Есть действия, которые могут выполнять все животные, но каждое животное делает это по-своему.
Используя интерфейсы, мы можем написать код, который может работать для всех животных, даже если каждое животное ведёт себя по-разному:
Пример
<?php
// Определение интерфейса
interface Animal {
public
function makeSound();
}
// Определения классов
class Cat
implements Animal {
public function makeSound() {
echo " Meow ";
}
}
class Dog implements Animal {
public function makeSound()
{
echo " Bark ";
}
}
class Mouse implements Animal {
public function makeSound() {
echo " Squeak ";
}
}
// Составьте список животных
$cat = new Cat();
$dog = new Dog();
$mouse = new
Mouse();
$animals = array($cat, $dog, $mouse);
// Скажите животным издать звук
foreach($animals as $animal) {
$animal->makeSound();
}
?>
Попробуйте сами »
Объяснение примера
Cat, Dog и Mouse - все классы, реализующие интерфейс Animal, что означает, что все они могут издавать звук с помощью метода makeSound()
. Из-за этого мы можем перебрать всех животных и сказать им, чтобы они издали звук, даже если мы не знаем, к какому типу животных относится каждое из них.
Поскольку интерфейс не сообщает классам, как реализовать метод, каждое животное может издавать звук по-своему.