0Pricing
PHP Academy · Урок

Реализация интерфейсов

Определяйте контракты с помощью interface и реализуйте их в нескольких классах

«Реализация интерфейсов» — бесплатный урок PHP Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Введение: интерфейсы PHP

Интерфейс определяет контракт: список сигнатур методов, которые должны предоставить реализующие его классы. В отличие от абстрактных классов, один класс может реализовывать несколько интерфейсов.

Ключевые понятия

Ключевые понятия:

  • Объявляется с помощью interface Name {}
  • У методов нет тела — только сигнатуры
  • Реализуется с помощью implements InterfaceName
  • Класс может реализовывать несколько интерфейсов

Определение интерфейса

Пример:

<?php
interface Serializable {
    public function serialize(): string;
    public function unserialize(string $data): void;
}

interface Loggable {
    public function toLog(): string;
}

// Implementing both interfaces:
class Event implements Serializable, Loggable {
    public function __construct(private string $type, private string $data) {}
    public function serialize(): string { return json_encode(['type'=>$this->type,'data'=>$this->data]); }
    public function unserialize(string $d): void { $a = json_decode($d,true); $this->type=$a['type']; $this->data=$a['data']; }
    public function toLog(): string { return "[{$this->type}] {$this->data}"; }
}

Интерфейс как тип

Продолжение:

<?php
interface Cache {
    public function get(string $key): mixed;
    public function set(string $key, mixed $val, int $ttl = 0): void;
    public function delete(string $key): void;
}

// Function accepts any Cache implementation:
function loadUser(int $id, Cache $cache): array {
    $key = "user:$id";
    $user = $cache->get($key);
    if (!$user) {
        $user = fetchFromDb($id);
        $cache->set($key, $user, 3600);
    }
    return $user;
}

Константы интерфейса

Подробнее:

<?php
interface HttpMethods {
    const GET    = 'GET';
    const POST   = 'POST';
    const PUT    = 'PUT';
    const DELETE = 'DELETE';
}

class Router implements HttpMethods {
    public function addRoute(string $method, string $path, callable $handler): void {
        // ...
    }
}

$router = new Router();
$router->addRoute(HttpMethods::GET, '/users', fn() => []);

Расширение интерфейса интерфейсом

Практическое использование:

<?php
interface Readable {
    public function read(): string;
}

interface Writable {
    public function write(string $data): void;
}

// Interface can extend multiple interfaces:
interface ReadWrite extends Readable, Writable {
    public function seek(int $position): void;
}

class FileStream implements ReadWrite {
    public function read(): string    { return ''; }
    public function write(string $d): void { }
    public function seek(int $p): void { }
}

Внедрение зависимостей с помощью интерфейсов

Расширенное использование:

<?php
interface MailerInterface {
    public function send(string $to, string $subject, string $body): bool;
}

class SmtpMailer implements MailerInterface {
    public function send(string $to, string $subject, string $body): bool {
        // real SMTP send
        return true;
    }
}

class UserService {
    public function __construct(private MailerInterface $mailer) {}

    public function register(string $email): void {
        // save user...
        $this->mailer->send($email, 'Welcome!', 'Thanks for joining.');
    }
}

Шаблон

Распространённые шаблоны интерфейсов PHP помогают аккуратно решать регулярно возникающие задачи проектирования. Применяйте их последовательно, чтобы код оставался понятным и удобным для сопровождения.

Когда использовать

Знать, когда применять интерфейсы PHP, так же важно, как знать, как это делать. Чрезмерное использование приводит к усложнению, а недостаточное — к дублированию.

Пример из реального мира

В реальных приложениях интерфейсы PHP часто встречаются во фреймворках, ORM и служебных уровнях. Понимание этой возможности подготовит Вас к участию в профессиональных проектах на PHP.

Распространённые ошибки

Избегайте этих ошибок при работе с интерфейсами PHP:

  • Классы могут реализовывать несколько интерфейсов, но расширять только один класс
  • Интерфейсы не могут иметь свойства или тела методов (за исключением реализации по умолчанию в PHP 8)
  • Всегда ориентируйтесь на интерфейс (абстрактный тип), а не на реализацию
  • Используйте интерфейсы для внедрения зависимостей и создания имитаций в тестах

Быстрая проверка

Сколько интерфейсов класс PHP может реализовывать одновременно?

Итоги: интерфейсы PHP

Итоги:

  • Классы могут реализовывать несколько интерфейсов, но расширять только один класс
  • Интерфейсы не могут иметь свойства или тела методов (за исключением реализации по умолчанию в PHP 8)
  • Всегда ориентируйтесь на интерфейс (абстрактный тип), а не на реализацию
  • Используйте интерфейсы для внедрения зависимостей и создания имитаций в тестах

Часто задаваемые вопросы

Урок «Реализация интерфейсов» бесплатный?

Да — полный текст урока «Реализация интерфейсов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Реализация интерфейсов»?

Определяйте контракты с помощью interface и реализуйте их в нескольких классах Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Реализация интерфейсов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Расширение классов с помощью наследования
  2. Абстрактные классы и методы
  3. Реализация интерфейсов
  4. Трейты для повторного использования кода
← Назад к PHP Academy