Ковариантность (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): наследник должен быть безопасной заменой родителя.