Пример ответа
1) Короткий ответ
Интерфейс — это контракт, который определяет, какие методы должен реализовать класс, без описания их реализации.
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) Практический совет
Создайте интерфейс
Logger
с методамиlogInfo()
,logError()
и реализуйте его в классахFileLogger
иDatabaseLogger
.Найдите в своем коде класс, который зависит от конкретной реализации, и перепишите его чтобы он зависел от интерфейса.