在 PHP 中,是否在父方法接受任何类型中断 LSP 的子类方法中指定参数类型?
In PHP does specifying an argument type in a subclass method where the parent method accepts any type break LSP?
如果我的接口有一个方法:
doSomething($param);
我的 class 实现了这个接口,指定参数类型如下:
doSomething(int $param) {}
这会破坏 LSP 吗?
是:如果 f2
的参数是 contravariant(及其 return 类型协变) w.r.t 到 f1
.
考虑你的例子:上层 doSomething
(f1
) 的客户端假定它可以将任何值传递给函数,但如果被调用的实际实现是下层 doSomething
(f2
),可能会出现错误,因为此实现只接受整数。
您可能还会发现 this article 关于 Scala 中的变体很有趣。
如果我的接口有一个方法:
doSomething($param);
我的 class 实现了这个接口,指定参数类型如下:
doSomething(int $param) {}
这会破坏 LSP 吗?
是:如果 f2
的参数是 contravariant(及其 return 类型协变) w.r.t 到 f1
.
考虑你的例子:上层 doSomething
(f1
) 的客户端假定它可以将任何值传递给函数,但如果被调用的实际实现是下层 doSomething
(f2
),可能会出现错误,因为此实现只接受整数。
您可能还会发现 this article 关于 Scala 中的变体很有趣。