Skip to main content

Field note

Что такое интерфейсы ?

PHPLearnRefresh

Что такое интерфейсы ? Спросят с вероятностью 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!");

Зачем они нужны?

Согласованность: Обеспечивают стандартизацию, требуя от классов реализациопределённых методов. ✅Гибкость: Различные классы могут предоставлять свою собственную реализацию интерфейса, что позволяет программам динамически изменять поведение. ✅Разделение и инкапсуляция: Позволяют создавать код, который может работать с любым объектом, реализующим интерфейс, без знания конкретной реализации этого объекта.