Field note
Что такое интерфейсы ?
Что такое интерфейсы ? Спросят с вероятностью 27%
Интерфейсы — это структуры, которые помогают определять шаблонные методы, которые должны быть реализованы в классах, их имплементирующих. Интерфейсы предоставляют способ формализовать определённые аспекты поведения объекта, гарантируя, что классы реализуют предписанные методы. Это полезно для создания унифицированного API и для обеспечения согласованности между различными частями приложения.
Особенности:
1️⃣Методы интерфейса: Все методы в нем должны быть публичными и не могут иметь реализацию. Тело каждого метода определяется только в классах, которые реализуют интерфейс.
2️⃣Наследование интерфейсов: Могут наследовать другие интерфейсы, и класс может реализовывать множество интерфейсов, что обеспечивает гибкость множественного наследования через интерфейсное программирование.
Пример использования
Допустим, у вас есть приложение с различными способами логирования информации (файл, облако, консоль). Вы можете определить интерфейс LoggerInterface, который будет иметь метод log(). Затем, разные классы, такие как FileLogger, CloudLogger, и ConsoleLogger, могут реализовать этот интерфейс, обеспечивая свою уникальную реализацию метода log().
interface LoggerInterface {
public function log($message);
}
class FileLogger implements LoggerInterface {
public function log($message) {
file_put_contents('log.txt', $message . PHP_EOL, FILE_APPEND);
}
}
class CloudLogger implements LoggerInterface {
public function log($message) {
// отправка сообщения в облачное хранилище
}
}
class ConsoleLogger implements LoggerInterface {
public function log($message) {
echo $message . PHP_EOL;
}
}
// Пример использования
$logger = new FileLogger();
$logger->log("Hello, World!");Зачем они нужны?
✅Согласованность: Обеспечивают стандартизацию, требуя от классов реализациопределённых методов. ✅Гибкость: Различные классы могут предоставлять свою собственную реализацию интерфейса, что позволяет программам динамически изменять поведение. ✅Разделение и инкапсуляция: Позволяют создавать код, который может работать с любым объектом, реализующим интерфейс, без знания конкретной реализации этого объекта.