Что такое ковариантность и контравариантность?

Ответ

Ковариантность (PHP 7.4+) - возвращаемый тип в наследнике может быть более конкретным:

interface Factory {
    public function create(): Animal;
}
class DogFactory implements Factory {
    public function create(): Dog { /* ... */ } // Dog extends Animal - OK
}

Контравариантность (PHP 7.4+) - тип параметра в наследнике может быть более общим:

interface Handler {
    public function handle(Dog $animal): void;
}
class AnimalHandler implements Handler {
    public function handle(Animal $animal): void { /* ... */ } // Animal <- Dog - OK
}

Это следствие принципа подстановки Лисков (LSP): наследник должен быть безопасной заменой родителя.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.