Барбары Лисков
я хочу, чтобы в интерфейсе в методах были прописаны в качестве параметров интерфейсы в качестве типов данных. некоторые примеры находил, но почему-то по такому же принципу реализовать не получилось. одна и та же ошибка: Declaration of ..имя класса, метода и аргументы с классом... must be compatible with другой интерфейс. В общем ругается и говорит, что классы должны быть совместимы. По факту он (используемый класс в аргументах метода) реализует указанный интерфейс, но все равно не работает.
Пример:
interface IParam {}
interface IMethod{
public function methodInterface(IParam $param);
}
class Param implements IParam {}
class Method implements IMethod {
public function methodInterface(Param $param){
return $param->value;
}
}
Должно ли такое работать или есть какие-то подводные камни?
принцип подстановки Лисков - require no more, promise no less ты нарушаешь первую часть этого правила твоя реализация начинает требовать больше, чем описано в интерфейсе
Обсуждают сегодня