Інтерфейс дозволяє писати код, який залежить від абстракції, а не від конкретного класу. Можна підставити будь-яку реалізацію, яка відповідає контракту. Це основа Dependency Injection і тестування.
interface Logger {
public function log(string $message): void;
}
class FileLogger implements Logger { ... }
class NullLogger implements Logger { ... }