在 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 中的变体很有趣。