Hi Am 2025-03-21 21:41, schrieb Gina P. Banyard:
Am I following that? Because just from writing that I am not sure I agree, which means I may be misunderstanding. :-)I am saying: interface I { pubic function foo(never $a); } can ***not*** be "upgraded" to interface I<A> { pubic function foo(A $a); } whereas it is possible to go from interface I { pubic function foo(mixed $a); } to interface I<A> { pubic function foo(A $a); } The implementing classes are completely irrelevant in this context.
I don't follow here. Neither interface “could be upgraded” to make use of generics, since the user would need to specify the type for `A`.
However the former could just be upgraded to `I<never>` and the implementing class could still override the parameter type with some specific type. This would not be better than the old interface with the hardcoded `never` type, but also not worse. The latter would need to be upgraded to `I<mixed>`, since otherwise you would be restricting passing types that you formerly didn't, which makes the entire exercise useless.
Best regards Tim Düsterhus
