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 definition
interface Animal {
public
function makeSound();
}
// Class definitions
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 ";
}
}
// Create a list
of animals
$cat = new Cat();
$dog = new Dog();
$mouse = new
Mouse();
$animals = array($cat, $dog, $mouse);
// Tell the animals
to make a sound
foreach($animals as $animal) {
$animal->makeSound();
}
?>
Объяснение примера
Cat, Dog и Mouse — все это классы, реализующие интерфейс Animal, что означает, что все они могут издавать звук с помощью makeSound()
метода. Из-за этого мы можем пройтись по всем животным и попросить их издать звук, даже если мы не знаем, к какому типу относится каждое из них.
Поскольку интерфейс не сообщает классам, как реализовать метод, каждое животное может издавать звук по-своему.