В PHP указывает ли тип аргумента в методе подкласса, где родительский метод принимает любой разрыв типа LSP?
Если у моего интерфейса есть метод:
doSomething($param);
И мой класс, реализующий этот интерфейс, указывает тип аргумента следующим образом:
doSomething(int $param) {}
Это нарушает LSP?
1 ответ
Решение
Да: это звук для функции f2
быть подтипом другой функции f1
если f2
аргументы контравариантны (и его возвращаемый тип ковариантны) по отношению к аргументамf1
.
Рассмотрим свой пример: клиентка верхнего doSomething
(f1
) предполагает, что он может передать любое значение функции, но если фактическая вызываемая реализация - нижняя doSomething
(f2
) может возникнуть ошибка, поскольку эта реализация принимает только целые числа.
Вы также можете найти эту статью о вариациях в Scala.