On Thu, Mar 20, 2025, at 11:24 AM, Gina P. Banyard wrote:

> As the person that had the initial discussion in R11 with Jordan [1] 
> never as a parameter type for an interface actually is not the solution 
> for "poor man generics".
> Matthew Fonda [2] already replied to the thread pointing out the remark 
> Nikita made in the discussion of the previous RFC.
> But importantly, going from mixed parameter type to a generic parameter 
> type is *allowed* and not a BC change,
> however, going from a never parameter type to a generic parameter type 
> is a BC break.

To clarify, you're saying this:

interface I {
  pubic function foo(mixed $a);
}
class C implements I {
  public function foo(mixed $b) { ... }
}

Can turn into this:

interface I<A> {
  pubic function foo(A $a);
}
class C implements I<Foo> {
  public function foo(Foo $b) { ... }
}

But this could not turn into that:

interface I {
  pubic function foo(never $a);
}
class C implements I {
  public function foo(Foo $b) { ... }
}

Am I following that?  Because just from writing that I am not sure I agree, 
which means I may be misunderstanding. :-)

--Larry Garfield

Reply via email to