В PHP указывает ли тип аргумента в методе подкласса, где родительский метод принимает любой разрыв типа LSP?

Если у моего интерфейса есть метод:

doSomething($param);

И мой класс, реализующий этот интерфейс, указывает тип аргумента следующим образом:

doSomething(int $param) {}

Это нарушает LSP?

1 ответ

Решение

Да: это звук для функции f2 быть подтипом другой функции f1 если f2аргументы контравариантны (и его возвращаемый тип ковариантны) по отношению к аргументамf1.

Рассмотрим свой пример: клиентка верхнего doSomething (f1) предполагает, что он может передать любое значение функции, но если фактическая вызываемая реализация - нижняя doSomething (f2) может возникнуть ошибка, поскольку эта реализация принимает только целые числа.

Вы также можете найти эту статью о вариациях в Scala.

Другие вопросы по тегам