Что такое интерфейсы · PHP Backend — JobPilot

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

PHP Backend · 30%
Вопрос 15 / #
Пример ответа

1) Короткий ответ
Интерфейс — это контракт, который определяет, какие методы должен реализовать класс, без описания их реализации.

3) Ключевые идеи

  1. Контракт реализации — Интерфейс задает сигнатуры методов, которые обязаны реализовать все классы, его имплементирующие.

  2. Абстракция и полиморфизм — Позволяет работать с разными классами через общий интерфейс, обеспечивая взаимозаменяемость.

  3. Разделение ответственности — Четко разделяет "что должно быть сделано" (интерфейс) и "как это сделано" (конкретный класс).

5) Пример кода

php

Copy

Download

// Интерфейс определяет контракт для всех способов оплаты
interface PaymentMethod {
    public function processPayment(float $amount): bool;
}

// Классы реализуют интерфейс по-своему
class CreditCardPayment implements PaymentMethod {
    public function processPayment(float $amount): bool {
        // Логика оплаты картой
        echo "Processing credit card payment: $amount";
        return true;
    }
}

class PayPalPayment implements PaymentMethod {
    public function processPayment(float $amount): bool {
        // Логика оплаты через PayPal
        echo "Processing PayPal payment: $amount";
        return true;
    }
}

// Использование полиморфизма
class PaymentService {
    public function pay(PaymentMethod $payment, float $amount) {
        return $payment->processPayment($amount);
    }
}

// Клиентский код
$paymentService = new PaymentService();
$paymentService->pay(new CreditCardPayment(), 100.50);
$paymentService->pay(new PayPalPayment(), 75.25);

6) Follow-up вопросы

  • Чем интерфейс отличается от абстрактного класса?Множественное наследование.

  • Когда использовать интерфейсы?Для слабой связанности.

7) Практический совет

  1. Создайте интерфейс Logger с методами logInfo(), logError() и реализуйте его в классах FileLogger и DatabaseLogger.

  2. Найдите в своем коде класс, который зависит от конкретной реализации, и перепишите его чтобы он зависел от интерфейса.

PHP Backend
Junior
30%
Навигация
Какие знаешь паттерны проектирования
Следующий: Какой опыт работы с Docker
Предыдущий: Какие знаешь паттерны проектирования

Мы используем cookie для улучшения сайта. Продолжая пользоваться сайтом, вы соглашаетесь с политикой cookie и политикой конфиденциальности.